【问题标题】:How do I do a cast to an object type in C#?如何在 C# 中对对象类型进行强制转换?
【发布时间】:2010-06-25 03:52:26
【问题描述】:

我有一个:

public class MyClass { 
 private string PrivateString; 
}

我有一个接受的接口:

object o

我有一个 MyClass 列表,我需要通过对象 o 推送,而我的 Google 失败了。使这项工作的程序是什么?我知道这一定很简单,但我还没有在 C# 中进行类型转换。

【问题讨论】:

    标签: c# type-conversion


    【解决方案1】:
    MyClass my = new MyClass(); 无论什么功能需要对象是(我的);

    一切都会隐式转换为对象。

    【讨论】:

      【解决方案2】:

      List<MyClass> 对象仍然可以直接传递给您的接口实现,因为 List 可以隐式转换为 object(所有对象都可以)。如果编译器因为您设置代码的方式而抱怨(我不得不说,因为您实际上没有向我们展示任何代码),那么您可以显式转换它:

      myInterfaceFunction((object) myList);
      

      或:

      myInterfaceFunction(myList as object);
      

      如果您想转换列表的内容,并在已有List<MyClass> 时传递List<object>,那么您可以这样做:

      myInterfaceFunction(myList.Cast<object>().ToList());
      

      (如果你的接口函数使用IEnumerable&lt;object&gt;而不是List&lt;object&gt;,你可以去掉ToList())。

      这是一个简单的例子。这很好地说明了我关于显式转换为object 的评论-默认情况下,对MyFunction(myList) 的调用将转到MyFunction(IEnumerable&lt;object&gt; blah) 函数-您必须显式转换它以强制它转到MyFunction(object blah) 函数.

      namespace ConsoleApplication1
      {
          class Program
          {
              static void Main(string[] args)
              {
                  List<MyObject> myList = new List<MyObject>();
      
                  MyFunction(myList);
                  MyFunction((object)myList);
                  MyFunction(myList.Cast<object>().ToList());
                  MyFunction(myList.Cast<object>());
              }
      
      
              public static void MyFunction(List<object> blah)
              {
                  Console.WriteLine(blah.GetType().ToString());
              }
      
              public static void MyFunction(IEnumerable<object> blah)
              {
                  Console.WriteLine(blah.GetType().ToString());
              }
      
              public static void MyFunction(object blah) 
              {
                  Console.WriteLine(blah.GetType().ToString());
              }
          }
      
      
          public class MyObject { }
      }
      

      【讨论】:

        【解决方案3】:

        您无需进行任何类型转换即可将 MyClass 对象用于采用对象参数的方法,但是您可能在将 MyClass 对象列表转换为对象列表时遇到问题

        【讨论】:

          猜你喜欢
          • 2015-10-10
          • 1970-01-01
          • 2015-02-26
          • 1970-01-01
          • 1970-01-01
          • 2014-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多