Note that there are some explanatory texts on larger screens.

plurals
  1. POForce C# Compiler to Create an Unused Object Instance
    primarykey
    data
    text
    <p>Yes exactly what I want to do :) At least for a particular class. The problem is, I create a static instance of an object but I don not use it directly. Since I do some operations in the constructor ,like adding the object to a list, the constructor must be invoked at least once before I get the list.</p> <p>I guess that the compiler just optimizes the unused object.</p> <p>There must be a simple solution :-/</p> <p><b>EDIT</b></p> <p>Ok may be I miss something. Let me post my code. I wrote a class for custom enum purpose.</p> <pre><code> public class TypeSafeEnum&lt;TNameType, TValueType&gt; { protected readonly TNameType name; protected readonly TValueType value; private static List&lt;TypeSafeEnum&lt;TNameType, TValueType&gt;&gt; listEnums = new List&lt;TypeSafeEnum&lt;TNameType, TValueType&gt;&gt;(); protected TypeSafeEnum(TNameType name, TValueType value) { this.name = name; this.value = value; listEnums.Add(this); } public TNameType Name { get { return name; } } public TValueType Value { get { return value; } } public static TypeSafeEnum&lt;TNameType, TValueType&gt; GetName(TNameType name) { TypeSafeEnum&lt;TNameType, TValueType&gt; tse = null; for (int i = 0; i &lt; listEnums.Count; i++) { TypeSafeEnum&lt;TNameType, TValueType&gt; typeSafeEnum = listEnums[i]; if (EqualityComparer&lt;TNameType&gt;.Default.Equals(typeSafeEnum.name, name)) { tse = typeSafeEnum; } } return tse; } public static TypeSafeEnum&lt;TNameType, TValueType&gt; GetValue(TValueType value) { TypeSafeEnum&lt;TNameType, TValueType&gt; tse = null; for (int i = 0; i &lt; listEnums.Count; i++) { TypeSafeEnum&lt;TNameType, TValueType&gt; typeSafeEnum = listEnums[i]; if (EqualityComparer&lt;TValueType&gt;.Default.Equals(typeSafeEnum.value, value)) { tse = typeSafeEnum; } } return tse; } public static TNameType[] GetNames() { TNameType[] names = new TNameType[listEnums.Count]; for (int i = 0; i &lt; listEnums.Count; i++) { TypeSafeEnum&lt;TNameType, TValueType&gt; typeSafeEnum = listEnums[i]; names[i] = typeSafeEnum.name; } return names; } public static TValueType[] GetValues() { TValueType[] values = new TValueType[listEnums.Count]; for (int i = 0; i &lt; listEnums.Count; i++) { TypeSafeEnum&lt;TNameType, TValueType&gt; typeSafeEnum = listEnums[i]; values[i] = typeSafeEnum.value; } return values; } } public abstract class StringEnum : TypeSafeEnum&lt;string, int&gt; { protected StringEnum(string name, int value) : base(name, value) { } } public sealed class FileOptionEnum : StringEnum { public static readonly FileOptionEnum Name = new FileOptionEnum("Name", 0); public static readonly FileOptionEnum Extension = new FileOptionEnum("Extension", 1); public static readonly FileOptionEnum Size = new FileOptionEnum("Size", 2); public static readonly FileOptionEnum LastModified = new FileOptionEnum("Last Modified", 3); public static readonly FileOptionEnum LastOpened = new FileOptionEnum("Last Opened", 4); public static readonly FileOptionEnum Created = new FileOptionEnum("Created", 5); public FileOptionEnum(string name, int value) : base(name, value) { } } </code></pre> <p>Here is how I use it:</p> <pre><code> // if I omit this line it returns me empty array FileOptionEnum @enum = FileOptionEnum.Name; string[] names = FileOptionEnum.GetNames(); cbFileOptions.Items.AddRange(names); </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload