如何从我调用的方法中获取值? C#

How can I get a value from a method I called? C#

我想从调用的方法中获取字符串的值,这样我就可以使用 InnerHtml 创建列表。

这是一个示例代码。

protected void Button1_Click(object sender, EventArgs e)
{
    //MailBorrow();
    int count = 0;
    string[] names = new string[30];
    SqlCommand cmdgetnames = new SqlCommand("SELECT Distinct[names] FROM Employees", MyConN);
    using (SqlDataReader ReadeR = cmdgetnames.ExecuteReader())
        while (ReadeR.Read())
        {
            names[count] = ReadeR[0].ToString();
            count++;
        }
    foreach (string person in names)
    {
        Method(person);
        Sample.InnerHtml += **INEEDTHISBACK**;
    }
}
private void Method(string person)
{
    string html = "<h2>"+ person +",</h2>";
    SqlCommand cmdgetforPM = new SqlCommand("SELECT [tools] FROM Equipment WHERE owner = '" + person + "'", MyConN);
    using (SqlDataReader ReadeR = cmdgetforPM.ExecuteReader())
        while (ReadeR.Read())
        {
           html+= "<p>"+ Reader[tools].ToString() +"</p><br />"
        }
    **INEEDTHISBACK** = html;
}

我是新来的,如果您认为我的编码不好,请多多指教。 谢谢! :-)

为什么不呢?将 return 类型更改为 string 和 return 您生成的值。您还需要注意的是,

  • SQL 查询执行:- 您选择了执行查询的最差方法。利用参数化来执行此类串联查询。
  • 使用 StringBuilder 代替字符串

修改后的方法如下所示:

private string Method(string person)
{
    StringBuilder htmlBuilder = new StringBuilder();
    string querySql ="SELECT [tools] FROM Equipment WHERE owner = @person"; 
    using (SqlCommand cmdSql = new SqlCommand(querySql, conObject))
    {
        cmdSql.Parameters.Add("@person", SqlDbType.VarChar).Value = person;
        using (SqlDataReader reader = cmdSql.ExecuteReader())
        {               
            htmlBuilder.Append("<h2>"+ person +",</h2>");
            while (reader.Read())
            {
                htmlBuilder.Append("<p>"+ reader[tools].ToString() +"</p><br />");
            }
        }
     }
     return htmlBuilder.ToString();
}

在调用方法中也可以使用stringBuilder代替string,从而避免连续修改innetHtml文本。调用方式变化如下:

StringBuilder innerHtml = new StringBuilder();
foreach (string person in names)
{        
    innerHtml.Append(Method(person));
}
Sample.InnerHtml = innerHtml.ToString();

首先将方法的签名更改为 return 字符串

 private string Method(string person)
    {
        string html = "<h2>"+ person +",</h2>";
        SqlCommand cmdgetforPM = new SqlCommand("SELECT [tools] FROM Equipment WHERE owner = '" + person + "'", MyConN);
        using (SqlDataReader ReadeR = cmdgetforPM.ExecuteReader())
            while (ReadeR.Read())
            {
               html+= "<p>"+ Reader[tools].ToString() +"</p><br />"
            }
        return html;
    }

然后使用它:

Sample.InnerHtml += Method(person);

可以将它传递给另一个方法吗?

Class.MyMethod(html);

你的方法:

public static string MyMethod(string input)
{
    // do whatever here
    return input;
}

方法有一个 return 类型。当前您的方法使用 void,这没有任何意义。将其替换为 string 和 return,将 html 替换为 return 关键字。

请阅读以下有关 C# 中 return 关键字的文档。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/return

另一种解决方案是使用输出参数。