这就是我想要做的:
abstract class BaseAnimal;
class cat : BaseAnimal;
class dog : BaseAnimal;
var allAnimals = new list<BaseAnimal>();
foreach (var someVar in allVars)
{
var myAnimal = new BaseAnimal();
if (someVar == true)
{
myAnimal = new cat();
}
else
{
myAnimal = new dog();
}
/* do other things with myAnimal var */
allAnimals.add(myAnimal);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情,或者我将不得不在每个IF语句中初始化变量然后复制其他东西/把它放在一个函数中并调用它两次?
只需声明变量而不为其赋值:
BaseAnimal myAnimal;
Run Code Online (Sandbox Code Playgroud)
为什么要为它分配一个值,知道该值会立即被覆盖?
请注意,在您的情况下,无论如何都会在语句之后明确赋值变量if/else,因此这不是问题 - 在将项添加到列表时,您仍然可以读取变量值.
当然,您也可以考虑使用条件运算符:
var myAnimal = someVar ? (BaseAnimal) new Cat() : new Dog();
Run Code Online (Sandbox Code Playgroud)
BaseAnimal由于条件运算符的工作方式,所以只需要转换为 - 表达式的整体类型必须是第二个参数的类型或第三个参数的类型.
编辑:如果您需要设置特定于动物的属性,最简单的方法是在if语句中使用对象初始值设定项:
if (someVar)
{
myAnimal = new Cat { Lives = 9 };
}
else
{
myAnimal = new Dog { Shaggy = true };
}
Run Code Online (Sandbox Code Playgroud)
如果需要在其上调用方法,则需要一个特定类型的单独局部变量:
if (someVar)
{
Cat cat = new Cat();
cat.Groom();
myAnimal = cat;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |