我正在为C#中的项目创建一个类UML,我想知道它是否有可能做某事并想在我开始编写之前检查。
我有一个函数,它获取一个类Array,并根据其索引的'level'int返回其中一个类。它使用的数组将始终是相同的数组,但它包含的类将根据播放器输入而不同。
有没有办法可以将返回类型设置为“未定”之类的东西,然后在函数本身中根据数组[level]中的任何类设置返回类型?
谢谢
答案 0 :(得分:2)
您可以使用dynamic
作为返回类型:
动态类型是在C#4.0中引入的。动态类型间接使用System.Object,但它不需要在运行时对任何操作进行显式类型转换,因为它仅在运行时标识类型。
在上面的代码中,我们在变量中分配各种类型的值,因为它的类型是动态的,并且动态延迟确定类型直到执行。所有动态类型变量都在运行时享受派对。
dynamic
返回类型的示例:class ExampleClass
{
// A dynamic field.
static dynamic field;
// A dynamic property.
dynamic prop { get; set; }
// A dynamic return type and a dynamic parameter type.
public dynamic exampleMethod(dynamic d)
{
// A dynamic local variable.
dynamic local = "Local variable";
int two = 2;
if (d is int)
{
return local;
}
else
{
return two;
}
}
}
namespace DynamicExamples
{
class Program
{
static void Main(string[] args)
{
ExampleClass ec = new ExampleClass();
Console.WriteLine(ec.exampleMethod(10));
Console.WriteLine(ec.exampleMethod("value"));
// The following line causes a compiler error because exampleMethod
// takes only one argument.
//Console.WriteLine(ec.exampleMethod(10, 4));
dynamic dynamic_ec = new ExampleClass();
Console.WriteLine(dynamic_ec.exampleMethod(10));
// Because dynamic_ec is dynamic, the following call to exampleMethod
// with two arguments does not produce an error at compile time.
// However, itdoes cause a run-time error.
//Console.WriteLine(dynamic_ec.exampleMethod(10, 4));
}
}
// Results:
// Local variable
// 2
// Local variable
答案 1 :(得分:2)
dynamic
和Object
返回类型都有效(尽管Object
仅适用于非原始数据类型)
您可能希望将creating an interface视为返回类型,并在可能的返回值类中实现它。
interface IReturnType
{
void Do();
}
并且:
class AReturnType : IReturnType
{
void Do()
{
//do something
}
}
class BReturnType : IReturnType
{
void Do()
{
//do something else
}
}
用法是:
List<IReturnType> MyFunction( List<ConstantClass> constantClasses );
编辑:这不会在编译时改变返回类型,它只是一种不同的方法:)