好的,所以我可以同时进行某些工作,但是我所有的旧测试代码都被意外删除了,我无法再继续工作了……帮助!
我在库中有一个函数:
public int SetData( dynamic[] p_a )
{
int successful_count = 0;
int _save_selected_row;
//It goes on...
}
用户将调用此函数,我以为我记得它是这样调用的:
struct MyStruct
{
public String Name;
public String Home_Address;
}
MyStruct[] UseArray = new MyStruct[2];
private void button1_Click(object sender, EventArgs e)
{
UseArray[0].Name = "Override name 1";
UseArray[0].Home_Address = "Override address 1";
UseArray[1].Name = "Override name 2";
UseArray[1].Home_Address = "Override address 2";
ncflsDisplay1.SetData( UseArray );
}
但是我收到错误消息“无法从MyStruct []转换为dynamic []”。
相同错误
ncflsDisplay1.SetData( (dynamic[]) UseArray );
我知道一个月前我有类似的工作,但是在代码清理中,我的测试程序被删除了。
您知道用户需要进行什么样的调用,看起来必须使用具有任何类型的数组来调用“ SetData”吗?
更新: 可以与这种怪兽一起使用,但是我知道我不必这样做……
UseArray.Cast<dynamic>().ToArray()
在某一时刻有很多更简洁的代码-就像使用UseArray的简单调用一样,但现在不起作用。
被标记为重复的是因为标记它的人说我们应该使用类而不是结构,并且使用类来传递子类的对象已有充分的文档记录。尽管该建议是精心设计的,但不适用于此处。
第一个解决方案已被事件取代。我们有一个更新的解决方案!
将显示功能的参数更改为
public int SetData<T>( T[] p_a )
允许用户呼叫
ncflsDisplay1.SetData( UseArray );
答案 0 :(得分:0)
如果您确实必须使用该函数并且无法更新其签名,则可以尝试复制该数组:
prebuild.sh
否则,您可以将其更改为MyStruct[] UseArray = new MyStruct[2];
dynamic[] newArr = new dynamic[UseArray.Length];
Array.Copy(UseArray, newArr, UseArray.Length);
SetData(newArr);
或SetData(对象数据)
答案 1 :(得分:0)
好吧,尽管我知道我以前不必这样做,但我们正在朝着这个方向前进。
System.Collections.Generic.List<Deck>' could be found.
较新的解决方案:请参见已编辑问题的结尾,但基本上是现在
UseArray.Cast<dynamic>().ToArray()
所以通话很简单
public int SetData<T>( T[] p_a )