Mar*_*aev 4 .net c# oop visual-studio-2013
我有一个方法
public Action FirstAction(object data)
{
}
Run Code Online (Sandbox Code Playgroud)
我必须将两个变量传递给此类,例如int,它们是不同类型string的对象或任何其他类型的对象.
我读过我能做到的
FirstAction( new{int a, string b} )
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在FirstAction方法中访问两个分离的变量?
注意:我无法将object参数更改为object[]或params object[]; 它需要使用当前签名完成.
如果您无法更改功能签名,则可以始终使用动态:
public Action FirstAction(object data) {
dynamic dataAsDynamic = data;
int a = dataAsDynamic.a;
string b = dataAsDynamic.b;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是非常脆弱的,因为有人会更改代码将中断的这些字段的名称.我实际上并不建议这样做,但如果你无法控制功能签名那么你就有点卡住了.
你需要使用反射:
foreach (var property in data.GetType().GetProperties())
{
if (!property.CanRead) continue;
if (property.GetIndexParameters().Length > 0) continue;
string name = property.Name;
object value = property.GetValue(data, null);
...
}
Run Code Online (Sandbox Code Playgroud)
或动态:
dynamic d = data;
int a = d.a;
string b = d.b;
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |