C# C能使我的类看起来像另一个类吗?
我有一个类似这样的类:C# C能使我的类看起来像另一个类吗?,c#,class,c#-3.0,C#,Class,C# 3.0,我有一个类似这样的类: public class BasePadWI { public WorkItem WorkItemReference { get; set; } .... Other stuff ...... } public Dictionary<BasePadWI, Canvas> Pad { get; set; } List<WorkItem> workItems = Pad.Keys.ToList(); 我有一本字典,定义如下: pu
public class BasePadWI
{
public WorkItem WorkItemReference { get; set; }
.... Other stuff ......
}
public Dictionary<BasePadWI, Canvas> Pad { get; set; }
List<WorkItem> workItems = Pad.Keys.ToList();
我有一本字典,定义如下:
public class BasePadWI
{
public WorkItem WorkItemReference { get; set; }
.... Other stuff ......
}
public Dictionary<BasePadWI, Canvas> Pad { get; set; }
List<WorkItem> workItems = Pad.Keys.ToList();
你可以做:
List<WorkItem> workItems = Pad
.Keys
.Select(basePad => basePad.WorkItemReference)
.ToList();
这将使用LINQ动态提取您的成员。您可以执行以下操作:
List<WorkItem> workItems = Pad
.Keys
.Select(basePad => basePad.WorkItemReference)
.ToList();
这将使用LINQ动态提取您的成员。否。BasePadWI不是工作项。如果您想要继承的好处,那么您需要使用继承。在您的情况下,需要使BasePadWI从WorkItem继承。ConvertAll在不解封WorkItem的情况下几乎可以做到最好。否。BasePadWI不是WorkItem。如果您想要继承的好处,那么您需要使用继承。在您的情况下,需要使BasePadWI从WorkItem继承。ConvertAll在不解封WorkItem的情况下可以做得很好。您可以覆盖cast运算符以进行转换
public class BasePadWI
{
protected WorkItem _workItemReference;
public WorkItem WorkItemReference { get { return _workItemReference; }}
public static implicit operator WorkItemReference(BasePadWI item)
{
return item._workItemReference;
}
.... Other stuff ......
}
这可能有点误导,因为您并没有真正将BasePadWI转换为WorkItem,但它应该可以让您非常轻松地构建所需的列表
每当您执行以下操作时:
BasePadWI bpw = new BasePadWI();
WorkItem item = bpw;
bpw应该隐式转换为WorkItem,由于我们声明的运算符,它返回对bpw的内部WorkItem\u workItemReference的引用
你也可以用它,比如说,将数据库连接转换为整数,所以要小心,不要让你的代码太难被可怜的schmuck解释,因为他以后会维护它。你可以为它重写转换操作符
public class BasePadWI
{
protected WorkItem _workItemReference;
public WorkItem WorkItemReference { get { return _workItemReference; }}
public static implicit operator WorkItemReference(BasePadWI item)
{
return item._workItemReference;
}
.... Other stuff ......
}
这可能有点误导,因为您并没有真正将BasePadWI转换为WorkItem,但它应该可以让您非常轻松地构建所需的列表
每当您执行以下操作时:
BasePadWI bpw = new BasePadWI();
WorkItem item = bpw;
bpw应该隐式转换为WorkItem,由于我们声明的运算符,它返回对bpw的内部WorkItem\u workItemReference的引用
你也可以用它,比如说,将数据库连接转换成整数,所以要小心,不要让你的代码太难被可怜的schmuck解释,因为他以后会维护它。重写转换操作符是可能的。我看到大卫刚刚发布了同样的消息。这是一个样本
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo();
BasePadWI bp = (BasePadWI)foo;
Console.WriteLine(bp.name);
}
}
class BasePadWI {
public string name = "BasePadWI";
}
class Foo
{
BasePadWI basePadWI = new BasePadWI();
public static implicit operator BasePadWI(Foo foo)
{
System.Console.WriteLine("Converted Foo to BasePadWI");
return foo.basePadWI;
}
}
可以重写强制转换运算符。我看到大卫刚刚发布了同样的消息。这是一个样本
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo();
BasePadWI bp = (BasePadWI)foo;
Console.WriteLine(bp.name);
}
}
class BasePadWI {
public string name = "BasePadWI";
}
class Foo
{
BasePadWI basePadWI = new BasePadWI();
public static implicit operator BasePadWI(Foo foo)
{
System.Console.WriteLine("Converted Foo to BasePadWI");
return foo.basePadWI;
}
}
虽然这不完全符合我的要求,但它不适用于列表,它是最接近的。谢谢你,戴夫!虽然这不完全符合我的要求,但它不适用于列表,它是最接近的。谢谢你,戴夫!这与convert选项类似,但更好,因为在转换之前我不必做ToList。不完全是我想要的,但是谢谢。这类似于转换选项,但更好,因为我不必在转换之前做收费表。不完全是我想要的,但是谢谢。