在方法中赋值到结构数组在 C# 中不起作用
本文关键字:不起作用 数组 方法 赋值 结构 | 更新日期: 2023-09-27 17:55:26
这是我的LinqPad中的代码片段:
public class Elephant{
public int Size;
public Elephant()
{
Size = 1;
}
}
public struct Ant{
public int Size;
}
private T[] Transform2AnotherType<T>(Elephant[] elephantList)
where T:new()
{
dynamic tArray = new T[elephantList.Length];
for (int i = 0; i < elephantList.Length; i++)
{
tArray[i] = new T();
tArray[i].Size = 100;
//tArray[i].Dump();
}
return tArray;
}
void Main()
{
var elephantList = new Elephant[2];
var elephant1 = new Elephant();
var elephant2 = new Elephant();
elephantList[0] = elephant1;
elephantList[1] = elephant2;
elephantList.Dump();
var r = Transform2AnotherType<Ant>(elephantList);
r.Dump();
}
我想将一个已知类型的对象数组Elephant
更改为另一个类型为 T 的对象数组.T 不是class
,但仅限于 struct
由已经存在的 API 提供。T型的每个实例都共享一些公共属性,Size
说,但也具有自己的特定属性,我在示例代码中省略了。所以我把dynamic
关键字放在Transform2AnotherType<T>
内。而且我什至无法使用 Dump 来确定分配是否生效,因此会抛出RuntimeBinderException
。
我的问题是:如何在这样的结构数组中正确进行赋值并将其正确返回?
我建议像这样更改您的代码:
public class Elephant
{
public Elephant()
{
Size = 1;
}
public int Size { get; set; }
}
public struct Ant
{
public int Size { get; set; }
}
private static T[] Transform2AnotherType<T>(Elephant[] elephantList)
where T : new()
{
T[] tArray = new T[elephantList.Length];
for (int i = 0; i < elephantList.Length; i++)
{
dynamic arrayElement = new T();
arrayElement.Size = 100;
tArray[i] = arrayElement;
//tArray[i].Dump();
}
return tArray;
}
static void Main()
{
var elephantList = new Elephant[2];
var elephant1 = new Elephant();
var elephant2 = new Elephant();
elephantList[0] = elephant1;
elephantList[1] = elephant2;
//elephantList.Dump();
var r = Transform2AnotherType<Ant>(elephantList);
//r.Dump();
}