Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:上演员名单<;界面>;列出<;类别>;-内部类的cast obejct_C#_Oop_C# 4.0 - Fatal编程技术网

C#:上演员名单<;界面>;列出<;类别>;-内部类的cast obejct

C#:上演员名单<;界面>;列出<;类别>;-内部类的cast obejct,c#,oop,c#-4.0,C#,Oop,C# 4.0,我有一个定义为 public interface INamedReader { string DisplayInfoLine { get; } string DisplayName { get; } } 和一个实现该接口的类,但它是一个内部类 internal class NamedReader : INamedReader, INotifyPropertyChanged { public NamedReader(); public

我有一个定义为

public interface INamedReader
{
     string DisplayInfoLine { get; }
     string DisplayName { get; }
}
和一个实现该接口的类,但它是一个内部类

internal class NamedReader : INamedReader, INotifyPropertyChanged
    {
        public NamedReader();

        public string DisplayInfoLine { get; set; }
        public string DisplayName { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        public override string ToString();
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "");
        protected virtual bool Set<TField>(ref TField field, TField value, [CallerMemberName] string propertyName = "");
    }
现在我定义了一个类,它实现了INamedReader

public class ReaderDetails: INamedReader
{
     public string DisplayInfoLine { get; }

     public string DisplayName { get; }
}
然后我创建了一个返回列表的函数

public List<ReaderDetails> GetReaders
{
     var readers = new List<ReaderDetails>();
     var Ireaders = someobject.Getreaders();// Returns the list of NameReaderDevice (which is an internal class).
     // Now i would like cast Ireaders as readers and return.
}
公共列表GetReaders
{
var readers=新列表();
var Ireaders=someobject.Getreaders();//返回NameReaderDevice(内部类)的列表。
//现在我想让Ireaders成为读者并返回。
}

有人能帮我一下吗,那太好了。

你基本上是在试图将一个类转换成一个完全不同的类,就像在这张图片中,试图
Class2
转换成
Class3

在这种情况下,即使它们共享一个接口,也不能在一个接口和另一个接口之间进行转换

您有几个选择:

  • 使用方法(扩展或其他)在类之间转换,使用或(效率不高)
  • 使用(更多详细信息)
  • Getreaders()
    方法中返回接口而不是显式实现的类,然后在应用程序中使用接口而不是显式实现的类
    在第(3)种情况下,如果您需要或想要进一步解耦类实现,那么您可以对其使用依赖项注入(例如,通过nuget访问)。例如,在这种情况下,您可以在代码中创建所述接口的对象,而这些对象没有访问实现它的内部类的权限,

    您基本上是在尝试将一个类转换为一个完全不同的类,如图所示,尝试
    类2
    转换为
    类3

    在这种情况下,即使它们共享一个接口,也不能在一个接口和另一个接口之间进行转换

    您有几个选择:

  • 使用方法(扩展或其他)在类之间转换,使用或(效率不高)
  • 使用(更多详细信息)
  • Getreaders()
    方法中返回接口而不是显式实现的类,然后在应用程序中使用接口而不是显式实现的类
    在第(3)种情况下,如果您需要或想要进一步解耦类实现,那么您可以对其使用依赖项注入(例如,通过nuget访问)。例如,在这种情况下,您可以在代码中创建所述接口的对象,而该代码没有对实现它的内部类的访问权,

    比如
    var-Ireaders=someobject.Getreaders().Cast()使用linq?Like
    var-Ireaders=someobject.Getreaders().OfType()?如果它是一个“名称恐惧设备”列表,你不能将它们转换为“ReaderDetails”,你不是已经问过了吗<代码>类型的.GetReaders()。可能与Like
    var Ireaders=someobject.GetReaders().Cast()重复使用linq?Like
    var-Ireaders=someobject.Getreaders().OfType()?如果它是一个“名称恐惧设备”列表,你不能将它们转换为“ReaderDetails”,你不是已经问过了吗<类型的代码>.GetReaders()。可能重复
    
    public List<ReaderDetails> GetReaders
    {
         var readers = new List<ReaderDetails>();
         var Ireaders = someobject.Getreaders();// Returns the list of NameReaderDevice (which is an internal class).
         // Now i would like cast Ireaders as readers and return.
    }