C#将对象转换为模型类型

3

我有一个类型为'audi_b9_aismura'的空列表,我想用从另一个列表检索到的对象来填充它。

我知道这个对象是指定的类型(audi_b9_aismura),但我无法将其添加到列表中,即使使用Convert.Changetype也不起作用。以下代码在设计时会抛出以下错误:无法从“object”转换为“.audi_B9_aismura”。

List<audi_b9_aismura> dataList = new List<audi_b9_aismura>();

if (obj.GetType().Equals(typeof(audi_b9_aismura)))
                    {
                        dataList.Add(Convert.ChangeType(obj, typeof(audi_b9_aismura)));
                    }

我也尝试过,但这也不起作用。
audi_b9_aismura testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura));

当添加时,它可以将其转换为对象类型,但是再次添加时会提示类型错误。

var testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura));
dataList.Add(testVar);

如果我将对象类型填写到字符串中并检索,它将返回正确的类型(audi_b9_aismura)。
string result = Convert.ChangeType(obj, typeof(audi_b9_aismura)).GetType().ToString();

Convert.ChangeType() 返回一个对象,你仍然需要将其强制转换为正确的类型,因为在这种情况下强制转换是你所需要做的全部,Convert.ChangeType 没有任何作用。 - Ben Robinson
如果您只想将一个类型的项转换为另一个类型,您可以使用LINQ的Cast<>或OfType<>运算符。 - Panagiotis Kanavos
我发现奇怪的是,字符串结果被填充了正确的类型。我刚开始学习C#编程,所以可能我理解错了,但是如果我从“对象”中检索类型,并将其设置为我想要的类型(audi_b9_aismura),当我尝试用它来填充变量时,为什么它实际上没有被设置为该类型呢? - DaGrooveNL
3个回答

6
为什么不进行简单的转换呢?
if (obj is audi_b9_aismura)
{
    dataList.Add((audi_b9_aismura)obj);
}

正如Ben Robinson在评论中所说,Convert.ChangeType()返回一个object,它仍然需要强制转换为正确的类型。

好的,这个可行!谢谢!不过,我不明白为什么将它转换成另一种类型不起作用,但这样做可以。有人能解释一下吗? - DaGrooveNL
有道理,但遗憾的是,通过定义要转换的自定义类型,它并没有真正转换为自定义类型。编辑:哦,你删掉了你的评论... - DaGrooveNL
是的,这不是来自原文,而是来自Ben Robinson在评论中所说的。 - xlecoustillier
LINQ已经提供了Cast和OfType运算符,不需要创建临时列表或进行类型检查和转换。 - Panagiotis Kanavos

3
LINQ提供了 Cast<> OfType<>方法,分别允许您将对象强制转换或按特定类型进行筛选。
要检索特定类型的项目并将其作为列表,请编写以下内容:
var dataList=sourceList.OfType<audi_b9_aismura>().ToList();

如果您确定源代码只包含特定类型的项,可以这样编写代码:
var dataList=sourceList.Cast<audi_b9_aismura>().ToList();

1

尝试:

List<audi_b9_aismura> dataList = new List<audi_b9_aismura>();

if (obj is audi_b9_aismura)
{
    dataList.Add((audi_b9_aismura)obj);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接