c#返回多个值

本文关键字:返回 | 更新日期: 2023-09-27 18:18:29

我已经写了一个单独的类,持有我的网站的权限。我每节课都给这个班打电话。我有麻烦从我的权限类带回值。我将在下面展示我的代码:

Permissions类

public class Permissions
{
     public static string selectedNumber = "";
     public static string selectedName= "";
     public static string selectedLocation= "";
     public Info SetInfo(string selectedValue)
    {           
        string selectInfo = "SELECT [Num] AS 'Number', [Name] AS 'Name', CONVERT(nvarchar(50),RTRIM(b.Num])) + ' - ' + CONVERT(nvarchar(50),b.Name) AS 'Location' "
            + "FROM [TBL_Info] a "
            + "left join [TBL_Where] b on (a.[ID] = b.[ID]) "
            + "WHERE a.ID = @ID";
        sqlCmd = new SqlCommand(selectInfo, sqlConn);
        sqlConn.Open();
        sqlCmd.Parameters.AddWithValue("@ID", selectedValue);
        SqlDataReader rdrInfo = sqlCmd.ExecuteReader();
        if (rdrInfo.HasRows)
        {
            rdrInfo.Read();
            selectedNumber = rdrInfo .GetSqlString(rdrInfo .GetOrdinal("Number")).ToString();
            selectedName= rdrInfo .GetSqlString(rdrInfo .GetOrdinal("Name")).ToString();
            selectedLocation = rdrInfo .GetSqlString(rdrInfo .GetOrdinal("Location")).ToString();
        }
        sqlCmd.Connection.Close();
        return new Info()
        {
           number= selectedNumber, 
           name= selectedName,
           location= selectedLocation
        };
    }
    public class Info
    {
        public String number{ get; set; }
        public String name{ get; set; }
        public String location{ get; set; }
    }
}

我正在尝试在另一个类中调用它,像这样:

Classes.Permissions permission = new Classes.Permissions();
permission.SetInfo(selectedUserValue);

最终产品是我在类中设置文本框,我试图从permission.SetInfo()

的3个返回值进行调用

目前我不能得到任何返回....我清楚地知道我做错了什么。所以有人能给我一些关于如何实现这一点的建议吗?

c#返回多个值

除了一些风格的东西我有问题,你的代码看起来应该工作(只要你有数据在你的数据库)。要从一个方法中返回多个值,创建一个新对象(如Info)来定义要返回的东西。

所以,你应该可以这样写:

Textbox txtBox;
var info = new Classes.Permissions().SetInfo(SelectedUserValue);
txtBox.Text = 
       info.number ?? "<null>" + " " + 
       info.name ?? "<null> + " " + 
       info.location ?? "<null>'

请注意,我使用了空合并操作符(??),因为SetInfo可以返回Info的实例,如果没有从数据库查询返回行,则所有成员都是null

顺便说一下,从一个方法返回多个值的另一种方法是使用out参数:
Textbox txtBox;
string number;
string name;
string location;
new Classes.Permissions().SetInfo(SelectedUserValue, out number, out name, out location);

然后你的SetInfo看起来像:

public void SetInfo(string SeelctedUserValue, 
     out string number, out string name, out string location)
{
    //assign values to number,name and location
}

要返回多个相同对象的实例,那么你的方法应该返回

  1. IEnumerable(即ListArray),
  2. a Tuple<>

例如,如果你知道你要返回恰好是3,你可能想让你的方法返回Tuple<Info,Info,Info>:

public Tuple<Info, Info, Info> SetInfo(string SeelctedUserValue)
{
   //query db
   return new Tuple<Info, Info, Info>(
     new Info{ number = "number", name = "name", location="location},
     new Info{ number = "number", name = "name", location="location},
     new Info{ number = "number", name = "name", location="location});         
}