首页 > 解决方案 > 类/构造函数到 Action?

问题描述

我有两个类,它们都继承自 Stream 类。

FirstClass : Stream 
{
    FirstClass(Stream, CompressionMode) 
    {
         ..
    } 
}

SecondClass : Stream 
{
    SecondClass(Stream, CompressionMode) 
    {
         ..
    } 
}

我想将这些类之一放入一个变量(我猜是动作),然后从该变量创建一个新对象——就像这样:

Action<Stream, CompressionMode> classPattern = condition ? FirstClass : SecondClass

///And now this
var newObject = classPattern(Stream, CompressionMode);

///Or maybe even this
classPattern newObject = classPattern(Stream, CompressionMode);

你是怎么做到的?

感谢您的帮助<3

标签: c#classgenericsconstructordelegates

解决方案


看来,您需要一个带有两个参数的Func委托

Func<Stream, CompressionMode, Stream> classPattern = (stream, mode) => condition ? (Stream)new FirstClass(stream, mode) : new SecondClass(stream, mode);

并使用它

var newObject = classPattern(stream, compressionMode);

您也可以将其转换为本地函数

Stream ClassPattern(Stream stream, CompressionMode mode) =>
    condition ? (Stream) new FirstClass(stream, mode) : new SecondClass(stream, mode);

推荐阅读