如何和"可能"组织从返回元组类型的方法返回与参数的名称,作为一个exapmle
private static Tuple<string, string> methodTuple()
{
return new {Name = "Nick", Age = "Twenty"}; /*exception because need to new Tuple<string, string>(){Item1 = "Nick", Item2 = "Twenty"}o*/
}
Run Code Online (Sandbox Code Playgroud)
和调用参数 methodTuple.Name不喜欢methodTuple.Item1....N
这可能吗?
UPD:我想用没有新命名类型的命名参数创建对象.
Mar*_*zek 13
您需要声明一个帮助程序类来执行此操作.
public class MyResult
{
public string Nick { get; set; }
public string Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你想要返回的是匿名类型.顾名思义你不知道它的名字是什么,所以你不能声明你的方法来返回它.
您不能将方法的字段,属性,事件或返回类型声明为具有匿名类型.同样,您不能将方法,属性,构造函数或索引器的形式参数声明为具有匿名类型.要传递匿名类型或包含匿名类型的集合作为方法的参数,可以将参数声明为类型对象.但是,这样做会破坏强类型的目的.如果必须存储查询结果或将它们传递到方法边界之外,请考虑使用普通的命名结构或类而不是匿名类型.
更新
C#7引入了语言内置的Tuple支持,它带有命名元组
(string name, int age) methodTuple()
{
(...)
}
Run Code Online (Sandbox Code Playgroud)
有关docs.microsoft.com的更多信息,请访问:https://docs.microsoft.com/en-us/dotnet/articles/csharp/csharp-7#tuples
Mic*_*cko 10
在C#7.0(Visual Studio 2017)中有一个新选项:
(string first, string middle, string last) LookupName(long id)
Run Code Online (Sandbox Code Playgroud)
这是不可能的Tuple,不.您需要创建自己的新命名类型才能执行此操作.
启动C#7.0版现在可以命名较早使用默认名称类似的元组的属性Item1,Item2等等。
命名元组文字的属性:
var myDetails = (MyName: "RBT_Yoga", MyAge: 22, MyFavoriteFood: "Dosa");
Console.WriteLine($"Name - {myDetails.MyName}, Age - {myDetails.MyAge}, Passion - {myDetails.MyFavoriteFood}");
Run Code Online (Sandbox Code Playgroud)
控制台上的输出:
名字-RBT_Yoga,年龄-22,激情-Dosa
从方法返回元组(具有命名属性):
static void Main(string[] args)
{
var empInfo = GetEmpInfo();
Console.WriteLine($"Employee Details: {empInfo.firstName}, {empInfo.lastName}, {empInfo.computerName}, {empInfo.Salary}");
}
static (string firstName, string lastName, string computerName, int Salary) GetEmpInfo()
{
//This is hardcoded just for the demonstration. Ideally this data might be coming from some DB or web service call
return ("Rasik", "Bihari", "Rasik-PC", 1000);
}
Run Code Online (Sandbox Code Playgroud)
控制台上的输出:
员工详细信息:Rasik,Bihari,Rasik-PC,1000
创建具有命名属性的元组列表
var tupleList = new List<(int Index, string Name)>
{
(1, "cow"),
(5, "chickens"),
(1, "airplane")
};
foreach (var tuple in tupleList)
Console.WriteLine($"{tuple.Index} - {tuple.Name}");
Run Code Online (Sandbox Code Playgroud)
在控制台上输出:
1-牛5-鸡1-飞机
我希望我已经涵盖了所有内容。如果有任何我想念的东西,请在评论中给我反馈。
注意:我的代码段使用的是C#v6的字符串插值功能,如此处所述。
| 归档时间: |
|
| 查看次数: |
16379 次 |
| 最近记录: |