C# 如何从构造函数中的列表返回对象
我已从列表中的数据库中检索到一个静态表。 如果有人使用ID调用该类的构造函数,则构造函数会在列表中找到该对象并复制所有值C# 如何从构造函数中的列表返回对象,c#,.net,oop,C#,.net,Oop,我已从列表中的数据库中检索到一个静态表。 如果有人使用ID调用该类的构造函数,则构造函数会在列表中找到该对象并复制所有值 public class MyClass { public int Id { get; set; } public string Text { get; set; } public MyClass(int instanzId) { MyClass myClass = CachedList().Find(T => T.Id
public class MyClass
{
public int Id { get; set; }
public string Text { get; set; }
public MyClass(int instanzId)
{
MyClass myClass = CachedList().Find(T => T.Id == instanzId);
Id = myClass.Id;
Text = myClass.Text;
}
}
这将始终创建该对象的新实例。
是否可以直接从列表中返回对象?
像这样:
public class MyClass
{
public int Id { get; set; }
public string Text { get; set; }
public MyClass(int instanzId)
{
this = CachedList().Find(T => T.Id == instanzId);
}
}
我知道静态方法很简单,但如何在构造函数中实现呢?不,不是通过构造函数。你可以通过一种方法来做。例如,工厂:
public MyClass FindOrCreate(int instanceId)
{
MyClass obj = CachedList().Find(T => T.Id == instanzId);
//create obj when it does not exist
return obj;
}
不,不是通过构造函数。你可以通过一种方法来做。例如,工厂:
public MyClass FindOrCreate(int instanceId)
{
MyClass obj = CachedList().Find(T => T.Id == instanzId);
//create obj when it does not exist
return obj;
}
将缓存包装到另一个轻量级类中:
public class MyWrapClass {
private MyClass m_Cache;
public MyWrapClass() {
m_Cache = CachedList().Find(T => T.Id == instanzId);
...
}
...
// implicit cast to MyClass if you want it
public static implicit operator MyClass(MyWrapClass value) {
if (null == value)
return null;
else
return value.m_Cache;
}
}
...
// Or MyWrapClass test = new MyWrapClass();
MyClass test = new MyWrapClass();
将缓存包装到另一个轻量级类中:
public class MyWrapClass {
private MyClass m_Cache;
public MyWrapClass() {
m_Cache = CachedList().Find(T => T.Id == instanzId);
...
}
...
// implicit cast to MyClass if you want it
public static implicit operator MyClass(MyWrapClass value) {
if (null == value)
return null;
else
return value.m_Cache;
}
}
...
// Or MyWrapClass test = new MyWrapClass();
MyClass test = new MyWrapClass();
您不能从构造函数返回任何值,也不能为“this”赋值。这将始终创建该对象的新实例。-当调用新的MyClass时,您希望得到什么?@DanielA.White:至少,不是在类构造函数中。在一个结构构造器中,你可以分配给这个…我会写任何我能想到的废话,让@JonSkeet纠正我@MichaelK,你之前说过暗示所有的值都被缓存了。使用工厂方法如何显示它是否被缓存?您不能从构造函数返回任何值,也不能为“this”赋值。这将始终创建该对象的新实例。-当调用新的MyClass时,您希望得到什么?@DanielA.White:至少,不是在类构造函数中。在一个结构构造器中,你可以分配给这个…我会写任何我能想到的废话,让@JonSkeet纠正我@MichaelK,你之前说过暗示所有的值都被缓存了。使用工厂方法如何显示它是否被缓存?@MichaelK,如果你不想创建新实例,这是你唯一的选择。不幸的是。我认为有比复制属性更好的方法。@MichaelK,如果你不想创建新实例,这是你唯一的选择。很遗憾。我认为有比复制房产更好的方法。除了清晰的wtf?读取MyClass测试时=新建MyWrapClass;几个月后,我真的很喜欢这次尝试的聪明。除了清晰的wtf?读取MyClass测试时=新建MyWrapClass;几个月后,我真的很喜欢这次尝试的聪明。