- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我认为我可以利用新的 C# 6 运算符 nameof 从参数数组隐式构建键/值字典。
例如,考虑以下方法调用:
string myName = "John", myAge = "33", myAddress = "Melbourne";
Test(myName, myAge, myAddress);
我不确定是否会有一个 Test 实现能够从 params 数组中暗示元素的名称。
有没有办法只使用 nameof
而无需反射?
private static void Test(params string[] values)
{
List<string> keyValueList = new List<string>();
//for(int i = 0; i < values.Length; i++)
foreach(var p in values)
{
//"Key" is always "p", obviously
Console.WriteLine($"Key: {nameof(p)}, Value: {p}");
}
}
最佳答案
不,那是不可能的。您对使用的变量名称一无所知。此类信息不会传递给被叫方。
你可以这样实现你想要的:
private static void Test(params string[][] values)
{
...
}
public static void Main(string[] args)
{
string myName = "John", myAge = "33", myAddress = "Melbourne";
Test(new string[] { nameof(myName), myName });
}
或者使用字典:
private static void Test(Dictionary<string, string> values)
{
...
}
public static void Main(string[] args)
{
string myName = "John", myAge = "33", myAddress = "Melbourne";
Test(new Dictionary<string, string> { { nameof(myName), myName }, { nameof(myAge), myAge} });
}
或者使用动态
:
private static void Test(dynamic values)
{
var dict = ((IDictionary<string, object>)values);
}
public static void Main(string[] args)
{
dynamic values = new ExpandoObject();
values.A = "a";
Test(values);
}
另一种可能性是使用 Expression
,您将其传递给方法。在那里,您可以从表达式中提取变量名称并为其值执行表达式。
关于c# - 是否可以使用 nameof 运算符暗示 params 数组的参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403337/
我有一个简单的类: public class Stu { public string Name { get; set; } } 如果我这样做: var stu = new Stu(); Con
我发现了一个有趣的包并想在我的 typescript 应用程序中使用它:https://github.com/dsherret/ts-nameof 但是我无法导入nameof 函数。它不在 d.ts
我试图让检查 null 异常更容易,所以我创建了这个静态方法: /// /// Static method for throwing multiple argument null exception
我正在尝试获取通用接口(interface)上方法的名称。我希望它能工作,因为类型部分是一个有效的类型: //This does not compile nameof(IGenericInterfac
所以我想做的很简单。 我正在尝试对某些基本类型运行 nameof(),因为我需要这些常量来满足特定要求。 但是当我尝试为 nameof(bool) 这样做时,它说 nameof() 在当前上下文中不存
目前对于我的 combobox 绑定(bind),我这样写: comboBox1.DataSource = DataList .Select(x => new { Value = x,
使用 Entity Framework ,我有一个名为权限的实体,它有一组 bool s 指定可以做什么和不可以做什么。 有点像: public class Permissions { publ
我正在尝试获取通用接口(interface)上方法的名称。我希望它能工作,因为类型部分是一个有效的类型: //This does not compile nameof(IGenericInterfac
class Foo { public T Bar() { /* ... */ } } 我想将 Bar 的名字传递给 Type.GetMethod(string) .我可以这样做 someType
在 expressions 上使用 nameof 来提取属性名称是个好主意吗? //method with expression protected void RaisePropertyChanged
我正在试验 nameof 和泛型。我没有得到预期的结果。我不确定这是否是规范的一部分。 class MainClass { public static void Main (string[]
我正在使用 VS 2013 和 .Net Framework 4.6。我想使用新的 C# 6 功能(例如 nameof)。但我找不到它。 我应该使用 VS 2015 吗?还是更高的 .Net Fram
在 C# 6 中,您可以使用 nameof()运算符获取包含变量或类型名称的字符串。 这是在编译时评估还是在运行时通过某些 Roslyn API 评估? 最佳答案 是的。 nameof() 在编译时计
我在我的项目文件中使用 F# 4.7 和 preview。 我有这样的类型: type Record = { Name : string Description : string Fiel
nameof(order.User.Age)只返回 Age而不是 order.User.Age 以更受限制的方式进行操作的原因是什么? 如果我们只想要姓氏,我们可以做类似的事情 public stat
我有一个类的多个实例,我想在一个数组中跟踪这些实例,该数组包含我无法控制的此类类型。为此,我创建了一个 List然后我将其与 MyClass[] 中的每个值进行比较我无法控制。 然后,我使用 C#6.
如果我执行 nameof(instance.SomeProperty),它的计算结果为 "SomeProperty"。 有什么方法可以获得整个方法链 "instance.SomeProperty"?
我对 nameof() 运算符有点困惑。因此,例如我不能在另一个类的 nameof() 中使用类的私有(private)字段,但我可以使用 public 非 static 字段 using non s
我想使用下面的 C#6 代码 var joe = new Self(); Console.WriteLine(joe); ...并获得以下输出: joe 下面的尝试 class Self { pu
我现在正在用 C# 创建一个 ConfigurationSection。我决定通过使用 nameof(PropertyName) 而不是硬编码字符串来利用一些 C# 6 功能。 但是,我从 Resha
我是一名优秀的程序员,十分优秀!