【发布时间】:2018-09-10 20:10:53
【问题描述】:
我正在尝试使用反射来创建结构
这是我正在使用的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
public interface ISomeInterface
{
}
public struct SomeStruct : ISomeInterface
{
public int Value;
public SomeStruct(int value)
{
Value = value;
}
}
public struct Filter
{
public SomeStruct SomeStruct;
}
public class SomeClass
{
private List<ISomeInterface> someInterfaces = new List<ISomeInterface>();
public void Add(ISomeInterface someInterface)
{
this.someInterfaces.Add(someInterface);
}
public TFilter ToFilter<TFilter>() where TFilter : struct
{
var filterType = typeof(TFilter);
var filterFields = filterType.GetFields();
var result = Activator.CreateInstance<TFilter>();
foreach (var filterField in filterFields)
{
var component = this.someInterfaces.First(s => s.GetType() == filterField.FieldType);
filterField.SetValue(result, component);
}
return result;
}
}
class Program
{
public static void Main()
{
var someClass = new SomeClass();
var someStruct = new SomeStruct(10);
someClass.Add(someStruct);
var filter = someClass.ToFilter<Filter>();
// Should return 10, but returns 0, why?
Console.WriteLine(filter.SomeStruct.Value);
Console.ReadLine();
}
}
由于某种原因,ToFilter 方法的结果返回了一个值不正确的结构。我已经做了好几个小时了,我就是不明白发生了什么。
这让我沮丧了几个小时,如果有人可以帮助我,将不胜感激。
【问题讨论】:
-
您没有记录您的界面,也没有记录您的 SomeClass。 GetFilter 方法中还有一些接口。不要让你的听众努力重现你的问题。
-
ISomeInterface 是一个空接口,
SomeClass包含ISomeInterfaces和GetFilter方法的列表。 -
您的帖子下方有一个编辑链接。使用它。
-
全部完成 :) @LarsTech
标签: c# reflection system.reflection