[英]How to deal with objects of certain types c#
我总共有 5 个类,我总是为其创建一个 object。从这个对象集合中创建一个列表,其中包含列表中的不同类型的对象。
List<object> objectsEntries = new List<object>();
所有这些对象都有我想使用的属性。
然而,这有点令人困惑。 因为对于列表中的每个条目,我首先必须检查它是哪种类型。 然后我必须投 object 才能使用它。
像这样:
public void DoSomething(object objectsEntry)
{
if (objectsEntry is Class1)
{
Class1 commandTyped = (Class1)objectsEntry;
// Now I can use the properties of Class1
// e.g.
// Console.WriteLine(commandTyped.Name);
}
else if (objectsEntry is Class2)
{
Class2 commandTyped = (Class2)objectsEntry;
// Now I can use the properties of Class2
// e.g.
// Console.WriteLine(commandTyped.Name);
}
}
但是整个方法变得非常混乱,无论我想在哪里使用对象都会出现问题,因为我总是必须先确定类型然后再转换它。
此外,所有类别都具有完全不同的属性。
是否有任何可能的解决方案或方法?
我想这样做:
public interface ISomeClasses
{
int Id { get; set; }
}
public class SomeClass1 : ISomeClasses
{
public int Id { get; set; }
}
public class SomeClass2 : ISomeClasses
{
public int Id { get; set; }
}
public class Main
{
public void DoSomething(object objectsEntry)
{
if (objectsEntry is ISomeClasses someClass)
{
Console.WriteLine(someClass.Id);
}
}
}
简短说明:
如果您创建一个包含方法DoSomething()
的接口,您可以在所有自定义类中继承该接口并为每个类实现所需的DoSomething()
方法体,例如:
public interface ISomething
{
void DoSomething();
}
public class Class1 : ISomething
{
public string Name { get; set; }
public void DoSomething()
{
Console.WriteLine($"[{nameof(Class1)}] My name is {Name}");
}
}
public class Class2 : ISomething
{
public int Age { get; set; }
public void DoSomething()
{
Console.WriteLine($"[{nameof(Class2)}] I am {Age} years old");
}
}
// Other Class* implementations
然后,您可以创建一个接口类型列表,并用自定义类的对象填充它。 然后,在每个条目上调用DoSomething()
将为适当的Class*
类型调用指定的实现。
List<ISomething> entries = new()
{
new Class1 { Name = "Sarah" },
new Class2 { Age = 41 }
};
foreach (var entry in entries)
{
entry.DoSomething();
}
产生:
[Class1] 我叫莎拉
[Class2] 我今年41岁
示例小提琴在这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.