相关疑难解决方法(0)

为什么.NET String是不可变的?

众所周知,String是不可变的.String不可变的原因是什么,StringBuilder类的引入是可变的?

.net c# string immutability

182
推荐指数
8
解决办法
10万
查看次数

StringBuilder类是如何实现的?每次追加时它是否在内部创建新的字符串对象?

StringBuilder类是如何实现的?每次追加时它是否在内部创建新的字符串对象?

.net c# string stringbuilder

50
推荐指数
4
解决办法
1万
查看次数

.NET中的所有内容都是对象吗?

请帮助我们解决"几乎"的争议一切都是一个对象(Stack Overflow问题的答案作为一个新手,在学习C#之前有什么我应该注意的吗?).我认为就是这种情况,因为Visual Studio中的所有内容至少都显示为结构体.请张贴参考文献,以免它变成"现代傻瓜"(This American Life).

请注意,这个问题涉及C#,不一定是.NET,以及它如何处理引擎盖下的数据(显然它都是1和0).

以下是"一切都是对象"的评论:

  • 呃,不,不是. - Binary Worrier
  • 我想要一个例子...... - scotty2012
  • 是不是从基类型Object派生的一切? - rizzle
  • 大多数东西都是物品... - Omar Kooheji
  • 值类型,整数,双精度,对象引用(不是它们自己的对象)等不是对象.它们可以"盒装"看起来像对象(egiToString())但实际上它们是原始类型.将条目更改为"NEVERLY everthing is a object",我将删除downvote - Binary Worrier
  • 我很欣赏澄清.我认为你可以在C#中与int进行交互的最低级别是一个结构,它不是一个对象?- http://msdn.microsoft.com/en-us/library/ms173109.aspx - rizzle
  • Int32不继承自继承自Object的ValueType吗?如果是这样,尽管有这种行为,int也是一个对象. - 克里斯农夫
  • 不,int的boxed类型继承自ValueType,它继承自Object.它们不是传统意义上的对象,因为a)int不是对int的引用,IT是int.b)int不是垃圾收集.如果你声明一个Int32,那么这个int是堆栈上的4个字节,故事结尾 - Binary Worrier

对象的定义:"对象"作为类System.Object的继承者与"对象"作为类型与"对象"作为引用类型的实例."

c# object

48
推荐指数
7
解决办法
2万
查看次数

投入"对象"类型的目的是什么?

我在网站上找到了如下代码.

 string a = "xx";
 string b = "xx";
 string c = "x";
 string d = String.Intern(c + c);

 Console.WriteLine((object)a == (object)b); // True
 Console.WriteLine((object)a == (object)d); // True
Run Code Online (Sandbox Code Playgroud)

在这里,再次投射到对象类型的目的是什么,因为a,b,d本身就是字符串的对象?

.net c# string equality string-interning

19
推荐指数
3
解决办法
734
查看次数

什么时候使用StringBuilder?

可能重复:
String vs StringBuilder

我刚刚重温了一些我曾经拿过VB.NET的书.我不确定我是否已经掌握了这一点,了解StringBuilder是如何/是什么.

使用指南是什么?如果要连接2个字符串或50个字符串,最好使用它吗?

或者当总字符串长度大于128个字符时?

或者,只要您使用它来将字符串添加到一起,您会看到性能优势吗?

在哪种情况下,最好使用StringBuilder实例来构建SQL语句string.format("Select * from x where y = {0}",1)

总是让我感到震惊的是,声明另一个变量并包含名称空间对小字符串连接不利,但我现在不确定.

对不起,很多文档告诉你要使用什么,而不是什么是最好的.

vb.net string stringbuilder

16
推荐指数
2
解决办法
3万
查看次数

当两者都是引用类型时,字符串与类

这是我上一次采访的方式:

问题:字符串存储在哪里?

答:堆是因为它是参考类型

问题:请解释以下代码:

static void Main(string[] args)
{
     string one = "test";
     string two = one;
     one = one + " string";

     Console.WriteLine("One is {0}" , one);
     Console.WriteLine("Two is {0}", two);
}
Run Code Online (Sandbox Code Playgroud)

答案:画了两张如下图:

(代表声明, string two = one;

在此输入图像描述

(代表语句, one = one + " string";.在堆上创建一个新字符串并分配)

在此输入图像描述

问题:正确.为下面的代码片段绘制类似的内容:

class Program
{
    static void Main(string[] args)
    {
        Test one = new Test { someString = "test" };
        Test two = one;
        one.someString = "test String";

        Console.WriteLine("One …
Run Code Online (Sandbox Code Playgroud)

.net c# string class immutability

13
推荐指数
1
解决办法
307
查看次数

C# 中什么是突变?

我正在阅读 Joseph Albahari 的书“C# 10 in a Nutshell”,它谈到“匿名类型的非描述性突变”,但我什至不知道突变是什么,在谷歌上我能找到的只是“突变测试”或“什么是突变”非破坏性突变?” 它们总是作为记录类型的附带功能而结束。有人可以帮我分解一下吗?一些例子将不胜感激!

.net c# mutation

6
推荐指数
1
解决办法
1403
查看次数

结构和接口中的C#getters/setter

我来了(根据我)C#中的结构和接口之间的奇怪区别.考虑这个接口和结构:

public interface INumber
{
    void ChangeNumber(int n);
    void Log();
}
public struct Number : INumber
{
    private int n;
    public void ChangeNumber(int n)
    {
        this.n = n;
    }
    public void Log()
    {
        Console.WriteLine(this.n);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我创建一个具有Number作为属性的新类时,使用ChangeNumber方法将n更改为2并使用Log打印该数字,它将打印0:

public class NumberContainer
{
    public Number Number { get; set; }
    public NumberContainer()
    {
        this.Number = new Number();
        this.Number.ChangeNumber(2);
        this.Number.Log();              //prints 0...
    }
}
Run Code Online (Sandbox Code Playgroud)

过了一会儿,我意识到这是因为当我调用时this.Number.ChangeNumber(2);,我实际创建了一个新对象(因为getter)并将该数字更改为2.但后来我通过将Number属性更改为INumber属性来更改了一些代码:

public class NumberContainer
{
    public INumber Number { get; set; }
    public NumberContainer()
    {
        this.Number = …
Run Code Online (Sandbox Code Playgroud)

c# getter struct interface

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

这段代码是否创建了临时字符串?

此代码是否采用x并直接更改其内容或创建临时新字符串然后复制到x?

如果后者是真的,我不明白为什么我们使用ref.

public static void RemoveSpaces(ref string x)
    {
        x = x.Replace(" ", "");
    }
Run Code Online (Sandbox Code Playgroud)

c#

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