【发布时间】:2016-08-09 20:21:54
【问题描述】:
我正在尝试迭代表单列表 (Mdichildren),并比较列表中特定表单的值。然而,使用 var 来包含任何类型的 Form 使得使用 form.Value 可能是特定于给定表单的困难。
foreach (var oven in Ovens) // list of objects
{
foreach (var form in this.Mdichildren) // contains multiple form types
{
if (form is Form_OvenControl)
{
if (oven.Id == form.ovenId)
{
// this fails because form.ovenId is treated like var, not like Form_OvenControl
}
}
else if (form is Form_Instructions)
{
// do something with different type of form
}
}
}
我知道我可以转换该值并创建该类型表单的新变量,但我想通过列表中的引用来使用该对象。我敢肯定我可以想出一个 hacky 方法,但我敢肯定有一种巧妙的方法可以做一些事情(不那么非法,但是),比如:
(Form_OvenControl)form.formSpecificValue = 0;
编辑: 正如下面所指出的,我可以简单地执行以下操作:
if (form is Form_OvenControl)
{
var ovenform = form as Form_OvenControl;
if (oven.Id == ovenform.ovenId)
{
}
}
演员表仍然会引用我要更改的列表中的项目。
我刚刚想到有一种方法可以将表单用作 Form_OvenControl 并基本上在一行中访问其中的变量。
【问题讨论】:
-
如果他的属性在基类中不存在,那么你将不得不进行强制转换。并且尽可能不要使用 var 。使代码更难阅读
-
旁注:您对
var有一些误解 - 请务必阅读stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp -
你说的是什么意思,但是我想在列表中通过引用来使用对象?即使您创建一个新变量并对其进行强制转换,它仍然会引用列表中的
Form。 -
@ChrisDunaway,谢谢。从本质上讲,我想我对“如果我更改一个值,创建一个新变量并从列表中的对象进行转换是否仍然引用列表中的项目”这个问题的措辞不佳?谢谢你的直接。
标签: c# winforms visual-studio .net-4.0