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。不完全是我想要的,但是谢谢。这类似于转换选项,但更好,因为我不必在转换之前做收费表。不完全是我想要的,但是谢谢。