2010-11-18 44 views
0
.aspx页面中

奇怪的例外,我有aspx页面上,我有类似的东西:

<% 
    string image; 
    if(cond) 
     image = "somestring"; 
%> 

... 

<% if (cond) { %> 
    <img src="<%= image %>" /> <!-- HereI get CS0165 exception: Use of unassigned local variable 'image' --> 
<% } else { %> 
    <div> ... </div> 
<% } %> 

所以我的问题是,为什么我得到的异常?如果我写string image = "";这个例外消失。这很奇怪。我想这个例外与aspx页面的呈现有关。有人能解释为什么发生这种情况吗

+0

如果你真的想知道你的页面是如何编译的,你可以配置MVC在编译时编译视图。在更熟悉的上下文中查看错误可能非常有启发性:http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc – spender 2010-11-18 21:04:36

回答

1

如果你的原因,而不是解决方案(你已经知道)之后就是 - 当你声明一个变量什么都不会发生。只有当你指定了一些东西时,编译器才会保留内存空间和一切。

所以试图访问尚未初始化的变量是无效的,因为机器的内存中无处可去......还没有。

这就像试图举起一个不在那里的桶:它不是空的桶......它不是一个满的桶......没有桶可以提起。

+0

感谢您的详细信息,我找不到有关C#编译器如何工作的更多信息 – devfreak 2010-11-19 08:42:51

8

当你声明变量image时,给它一个初始值。

string image = ""; 

你所得到的错误指示变量尚未在所有情况下(这仅当cond是真的被初始化)初始化。

这与被包含在.aspx页面中无关。你会在后面的代码中得到同样的错误。

+0

谢谢。我来自C++的土地,在那里你可以完全控制这个员工,我想我必须习惯C#中的所有限制。 – devfreak 2010-11-18 21:05:43

+3

“完全控制”的许多好处仅仅意味着允许您用伸缩瞄准镜拍摄自己的脚。这不是一个限制......编译器在这里帮你一个忙。 – spender 2010-11-18 21:09:16

+1

+1分。编译器帮助你不犯愚蠢的错误。你称之为限制,我称之为世俗任务的自动化。 – Chev 2010-11-18 21:11:49

1

甚至更​​好。将一个else添加到您,如果设置为默认值:

string image; 
if(cond) 
    image = "somestring"; 
else 
    image = String.Empty; 
+0

是的,这稍微好一点,因为这样我们就少了一个任务。谢谢 – devfreak 2010-11-19 09:16:19

+0

@devfreak通过让图像服务器端直接设置它的源代码,你可以有0个赋值:if(cond)Image1.Src =“somestring”; else Image1.Src =“somethingelse”; – 2010-11-19 21:08:38