作业问题

时间:2009-03-20 11:35:05

标签: c#

ag = logss_EventAnalyzer.tabEventsString [0];

ag 是一个静态字符串,

logss_EventAnalyzer 是一个类,

tabEventString 是一个静态字符串数组。

在调试期间,我看到logss_EventAnalyzer.tabEventsString [0]包含一些字符串,但它没有分配到ag。它的值为空。

这里有什么问题,解决方案是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

你说“在调试期间”;分配ag 时,logss_EventAnalyzer.tabEventsString[0]是否包含(非空)字符串

请注意,分配并不意味着对tabEventsString[0]的更改将反映在ag中,因为string是不可变的,并且对tabEventsString[0]的任何更改实际上都在创建 new 字符串。如果您想要这种类型的行为,则需要使用某个类的成员:

public class Foo {
    public string Bar {get;set;}
}
static Foo ag;
static Foo[] tabEventsString;
...
ag = logss_EventAnalyzer.tabEventsString[0];
...

现在ag.Bar将始终与tabEventsString[0].Bar

相同

另外 - 您是否有一个名为ag的局部变量?这将优先。

您可以发布演示此问题的代码吗?

撇开;请注意,如果您的应用程序变得复杂,静态字段和数组都会有各种相关的复杂性...您可能需要考虑重新分解它们。

以下工作正常:

static class logss_EventAnalyzer {
    static string[] tabEventsString = {"abc","def","ghi"};
    static string ag;   
    static void Main() {
        ag = logss_EventAnalyzer.tabEventsString[0];
        System.Console.WriteLine(ag);
    }
}

如果你正在做一些根本不同的事情,你将不得不给我们一个线索......

答案 1 :(得分:0)

如果相关行有断点,ag是否会分配值?

我怀疑在您的代码的其他部分中,您将ag设置为无意中为null,或者您可能在ag被赋予非空值之前分配logss_EventAnalyzer.tabEventsString[0]

如果你提供更多细节,我可以给出更好的答案。

答案 2 :(得分:0)

logss_EventAnalyzer.tabEventsString的第一个条目包含分配给空值的字符串。您必须查看堆栈跟踪以查看哪个对象被添加为第一个条目。该对象可以为空分配。