У меня есть три класса:
Во-первых, абстрактный:
Код: Выделить всё
namespace ReadonlyStaticOrder
{
using System;
using System.Collections.Generic;
public abstract class AbstractClass
{
public AbstractClass(string value, IEnumerable someValues)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (someValues == null)
{
throw new ArgumentNullException("someValues");
}
// would do something after...
}
}
}
Код: Выделить всё
namespace ReadonlyStaticOrder
{
using System.Collections.Generic;
public sealed class ReadonlyOrderInitialization : AbstractClass
{
// this line introduces the bug, since it call the ctor before SomeValues already initialized
// if removed, no more exception
public static readonly ReadonlyOrderInitialization Sample = new ReadonlyOrderInitialization("sample");
private static readonly IEnumerable SomeValues = new string[] { "one", "two", "three" };
public ReadonlyOrderInitialization(string value)
: base(value, SomeValues)
{
}
}
}
Код: Выделить всё
namespace ReadonlyStaticOrder
{
using System;
public sealed class Program
{
static void Main(string[] args)
{
try
{
new ReadonlyOrderInitialization("test");
}
catch (TypeInitializationException typeInitializationException)
{
Console.WriteLine(typeInitializationException.Message);
Console.WriteLine(typeInitializationException.InnerException.Message);
Console.WriteLine(typeInitializationException.StackTrace);
}
Console.ReadLine();
}
}
}
Инициализатор типа для
«ReadonlyStaticOrder.ReadonlyOrderInitialization» вызвало исключение.
Значение не может быть нулевым. Имя параметра: someValues в
ReadonlyStaticOrder.ReadonlyOrderInitialization..ctor(String value)
в ReadonlyStaticOrder.Program.Main(String[] args) в
d:\stackoverflow\static
readonlyissue\ConsoleApplication1\ReadonlyStaticOrder\Program.cs:line
12
Я добавил комментарий к строке который вводит ошибку. Для меня компилятор должен был бы предупредить меня, что поведение может быть странным из-за порядка статической инициализации. Я ошибаюсь?
Спасибо, ребята, надеюсь, у вас достаточно информации.
Подробнее здесь: https://stackoverflow.com/questions/858 ... parameters
Мобильная версия