相关疑难解决方法(0)

C#中的默认布尔值是多少?

boolean(bool)不能为null.和:

bool foo; if(foo){} // Use of unassigned local variable 'foo'
Run Code Online (Sandbox Code Playgroud)

为什么默认值不是假的?那么如果它不是null,它的值是多少?是什么原因?

编辑1 - 默认值确实为false - 但是应该初始化所有变量,为什么?这是另一个问题;)

编辑2 - 与Resharper:private bool foo = false; // Initializing field by default value is redundant???

c#

70
推荐指数
3
解决办法
10万
查看次数

C#未初始化的变量是危险的吗?

我熟悉C#规范,第5.3节,它说在使用之前必须分配一个变量.

在C和非托管C++中,这是有道理的,因为堆栈没有被清除,并且用于指针的内存位置可能在任何地方(导致难以追踪错误).

但我的印象是运行时不允许真正的"未分配"值.特别是未初始化的引用类型将始终具有空值,而不是先前调用方法或随机值所遗留的值.

这是正确的,还是我错误地假设这些年来检查null是否足够?你可以在C#中使用非真实的变量,或者CLR是否会处理这个变量并且总是设置了一些值.

c# clr

36
推荐指数
3
解决办法
5081
查看次数

使用空赋值修复"使用未分配的局部变量".为什么?

使用这样的一段代码,编译器抱怨c.MyProperty:

MyClass c;

try { throw new Exception(); }
catch (Exception) { }

c.MyProperty = 2; // "Use of unassigned local variable 'c'".
Run Code Online (Sandbox Code Playgroud)

然而,如果你指定一个不抱怨nullc在初始化:

MyClass c = null;

try { throw new Exception(); }
catch (Exception) { }

c.MyProperty = 2; // no complains this time.
Run Code Online (Sandbox Code Playgroud)

那么,为什么这有效呢?如果c未分配a null并且编译器假设允许它,则不会抛出相同的异常c.MyProperty,Object引用未设置为对象的实例

c# exception variable-assignment

32
推荐指数
1
解决办法
8万
查看次数

"使用未分配的局部变量"是什么意思?

我一直收到annualRate,monthlyCharge和lateFee的错误.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lab_5___Danny_Curro
{
    class Program
    {
        static void Main(string[] args)
        {
            string firstName;
            string lastName;
            int accNumber;
            string creditPlan;
            double balance;
            string status;
            Boolean late = false;
            double lateFee;
            double monthlyCharge;
            double annualRate;
            double netBalance;


            Console.Write("Enter First Name: ");
            firstName = Console.ReadLine();

            Console.Write("Enter Last Name: ");
            lastName = Console.ReadLine();

            Console.Write("Enter Account Number: ");
            accNumber = Convert.ToInt32(Console.ReadLine());


            Console.Write("Enter Credit Card Plan Number[Blank Will Enter Plan 0]: ");
            creditPlan = Console.ReadLine();

            Console.Write("Enter Balance: …
Run Code Online (Sandbox Code Playgroud)

c# unassigned-variable

30
推荐指数
5
解决办法
19万
查看次数

C#检查对象是否为空

我遇到了一个if语句,用于检查对象是否为空.

我有一个webClient go并从try/catch中的网站中提取JSON字符串.如果它出错,那是因为API中不存在3位数国家,我只是想跳过它.

这是我的代码:

    System.Net.WebClient wc = new System.Net.WebClient();

    RootObject ro;
    try
    {
        string resp = wc.DownloadString("https://restcountries.eu/rest/v2/alpha/" + Row.Code.ToString());

        JavaScriptSerializer js = new JavaScriptSerializer();

        ro = js.Deserialize<RootObject>(resp);
    }
    catch (Exception e)
    { }

    if (ro.Region != null)
    {
        Row.Region = ro.Region;
        Row.SubRegion = ro.Subregion;
    }
Run Code Online (Sandbox Code Playgroud)

RootObject是一个反序列化的类.这很好用.

但是,我在if语句中遇到"使用未分配的类'ro'时出错.

有人可以帮我解决这个问题吗?ro在if中如预期的那样工作?

我也试过检查一个特定的节点,它仍然挂在'ro'部分.

此外,这是SSIS中的脚本组件.

谢谢

c# ssis

6
推荐指数
2
解决办法
1170
查看次数

C#局部变量初始化 - 初学者的问题

我正在阅读MCTS Self Paced Training Kit(70-536)Edition 2,在第1章我们有以下内容.

如何声明值类型变量要使用类型,必须首先将符号声明为该类型的实例.值类型具有隐式构造函数,因此声明它们会自动实例化类型; 您不必像处理类一样包含New关键字.构造函数为新实例分配一个默认值(通常为null或0),但是您应该始终在声明中显式初始化该变量,如以下代码块所示:

'VB

Dim b As Boolean = False    

// C#  
bool b = false;
Run Code Online (Sandbox Code Playgroud)

但是,当我编译以下控制台应用程序时,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch1_70_536
{
    class Program
    {
        static void Main(string[] args)
        {
            bool b;
            Console.WriteLine("The value of b is " + b);
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到编译时错误

"使用未分配的局部变量b"

勘误表中甚至没有提到它.我做错了还是这本书完全错了?

c# variables initialization

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

使用参考参数

我正在自己学习C#,并希望得到一些帮助.我想创建一个简单的控制台程序,允许用户输入要加倍的数字.它说resultMain方法中的变量是未分配的,但是,我做错了什么?

using System;
class Program
{

    private static void Double(ref int num, ref int result)
    {
        result = num * 2;

    }

    private static int readNumber(string question)
    {
        Console.Write(question);
        string ans = Console.ReadLine();
        int number = int.Parse(ans);
        return number;
    }

    public static void Main()
    {
        int num, result;
        num = readNumber("Enter an integer to be doubled: ");
        Double(ref num, ref result);
        Console.WriteLine("The double of {0} is {1}", num, result);
        Console.WriteLine("Press enter to exit...");
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

c#

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

C#为结构错误的属性赋值

我有以下代码(简化)、一个结构和一个类。

public struct pBook
{
    private int testID;

    public string request;
    public string response;
    public Int32 status;
    public int test_id
    {
        get
        {
            return testID;
        }
        set
        {
            testID = value;
        }
    }
};

public class TestClass
{
    public static void Main(string[] args)
    {
        pBook Book1;
        pBook Book2;

        Book1.request = "a";
        Book2.response = "b";
        Book2.status = 201;
        Book2.test_id = 0;  //this doesn't work, why?
    }
}
Run Code Online (Sandbox Code Playgroud)

在声明中

Book2.test_id = 0;
Run Code Online (Sandbox Code Playgroud)

我收到错误

使用未分配的局部变量“Book2”

任何想法如何纠正?

c# structure

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

为什么这个C#代码会抛出错误:使用未分配的局部变量'n'

在MSDN上,此代码发布在https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch 我无法理解为什么它会抛出错误:

使用未分配的局部变量'n'.

static void Main()   
{  
    int n;  

    try   
    {  
        // Do not initialize this variable here.  
        n = 123;  
    }  
    catch  
    {  
    }  

    // Error: Use of unassigned local variable 'n'.  
    Console.Write(n);  
}
Run Code Online (Sandbox Code Playgroud)

c#

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

在C#中的async-await块中使用"out"时,不清楚编译器错误

我有一个我正在调用的方法,我想确保它在继续之前完成.我也有兴趣知道它是否成功完成,所以我正在做以下事情:

async void Foo() {
  bool success;

  // stuff

  await Task.Run(
    () => Bar(out success)
  );

  if (!success) { // this is the line causing the compiler-error
    // handle
  }

  // other stuff
}

void Bar(out bool success);
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误

CS0165使用未分配的局部变量'success'

这不是一个大问题,因为我可以变得可爱并初始化success=false并传递它,ref而不是out看起来像希望的那样.但是,我很好奇async-await(或Task.Run)的复杂性似乎会导致一个不保证的情况out success会被正确分配.

任何启示都表示赞赏!

编辑:

要添加更多上下文,以下块编译并执行正常.

void Caller() {
  bool success;
  Callee(out success);
  if (success) {
    // do something
  }
}

void Callee();
Run Code Online (Sandbox Code Playgroud)

这是因为out参数在传递之前不需要初始化.有关更多信息,请访问out:https …

c# out task async-await

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