小编Pri*_*est的帖子

.NET参数传递 - 按值引用v/s

我试图验证我对C#/ .NET/CLR如何处理值类型和引用类型的理解.我读过很多矛盾的解释

这就是我今天所理解的,如果我的假设是错误的,请纠正我.

诸如int等的值类型存在于堆栈上,引用类型存在于托管堆上,但是如果引用类型具有例如double类型的实例变量,则它将与其对象一起存在于堆上

第二部分是我最困惑的.

让我们考虑一个名为Person的简单类.

Person有一个名为Name的属性.

假设我在另一个类中创建了Person实例,我们称之为UselessUtilityClass.

请考虑以下代码:

class UselessUtilityClass
{
   void AppendWithUnderScore(Person p)
   {
     p.Name = p.Name + "_";
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我们在某处:

Person p = new Person();
p.Name = "Priest";
UselessUtilityClass u = new UselessUtilityClass();
u.AppendWithUnderScore(p);
Run Code Online (Sandbox Code Playgroud)

Person是一个引用类型,当传递给UselessUtilityClass时 - 这就是我去的地方 - 坚果...... 作为Person引用实例的VARIABLE p由VALUE传递,这意味着当我写p.Name时我会看到"牧师_"

如果我写的话

Person p2 = p;
Run Code Online (Sandbox Code Playgroud)

我做到了

p2.Name ="不是牧师";

写下p的名字就像下面我会得到"不是牧师"

Console.WriteLine(p.Name) // will print "Not a Priest"
Run Code Online (Sandbox Code Playgroud)

这是因为它们是引用类型并指向内存中的相同地址.

我的理解是否正确?

我认为当人们说.NET中的所有对象都通过Reference传递时会出现一些误解,这并不是基于我的想法.我错了,这就是为什么我来到堆叠器.

.net c# clr value-type reference-type

17
推荐指数
2
解决办法
1万
查看次数

将类型引用类型设置为null不会影响复制的类型?

为什么这会产生"0"?

object a = 0;
object b = a;
a = null;
Console.WriteLine(b.ToString()); // Produces "0"
Console.Read();
Run Code Online (Sandbox Code Playgroud)

不是b指向同一个位置并且设置a = null有效地使b null?

.net c# reference-type

8
推荐指数
3
解决办法
1350
查看次数

HtmlHelper里面的Razor"如果"声明

我编写了一个HtmlHelper扩展来根据我们的一些样式格式化一些内容.当未包含在if中时,帮助程序正确呈现内容.

但是,当我试图将它们包装在razor if语句中时,没有任何内容呈现,我怀疑它与Razor语法有关,我没有正确地做.

码:

<div class="notice">

    @if (DataModel.UserHasExpired)
    {
       Html.MyCustomNotificationBox("someparameter") // My helper Should render a div
    }

</div>
Run Code Online (Sandbox Code Playgroud)

如果我将我的通知箱放在if之外,它可以正常工作.我还验证了代码正在进入块中,但是当我检查它时,html中没有生成任何标记.

我尝试过像这样的@,以冒号结尾

@Html.MyCustomNotificationBox("somparameter");
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过@Html.Raw(带上面的..),这完全错误了.

有任何想法吗?

c# asp.net-mvc razor

5
推荐指数
2
解决办法
1万
查看次数

滚动内容

有没有人知道是否有一个通用的JavaScript库来启用滚动许多热门网站为频繁更新的内容做的事情?例如:http://foursquare.com/有一个很好的例子,我想要的,我想如果有一个常见的js库,我似乎无法在谷歌中正确查询,我会省去麻烦.

javascript ajax jquery

2
推荐指数
1
解决办法
169
查看次数

无法使用TagBuilder组合标签

我正在尝试构建组合标记:

第一个标签:<span class="requiredInidicator">* </span> 第二个标签:( <label>SomeText</label>为简洁而剪裁的属性)

我想结合这些来返回一个MVCHtmlString,但下面的代码完全忽略了span.有人能指出我做错了什么

这是我的代码:

// Create the Label
var tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("id", "required" + id);
//I get the id earlier fyi - not pertinent fyi for this question )

// Create the Span
var required = new TagBuilder("span");
required.AddCssClass("requiredInidicator"); 
required.SetInnerText("* ");

//Now combine the span's content with the label tag
tagBuilder.InnerHtml += required.ToString(TagRenderMode.Normal);
tagBuilder.SetInnerText(labelText);
var tag = MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
return tag;
Run Code Online (Sandbox Code Playgroud)

创建标记时,将完全忽略范围.当我在调试期间检查标签时,它并不关心我附加via所需的内容.InnerHtml+=

有什么明显的东西我做错了吗?

c# html-helper asp.net-mvc-4

2
推荐指数
1
解决办法
6594
查看次数