EnumのTryParse

第1引数には変換する文字列を指定する。 第2引数には変換された値を受け取る型の変数を指定する。

Enum.Parse とは異なり、例外をスローすることなく、変換できる。

Foo foo;
if (!Enum.TryParse(bar.ToString(), out foo))
{
    throw new InvalidCastException($"Fooには定義されていない値が選択されてます");
}

参考:Enum.TryParse(TEnum) メソッド (String, TEnum) (System)

値型と参照型

値型/参照型、構造体/クラス備忘録

値型はオブジェクト内にインライン定義され、 参照型は、実データをヒープに格納する。

その型をどのように扱うかを考え、 多様性(ポリモーフィズム)を持つか否かを考える必要がある。

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            // 値型
            var valueType = new ValueType
            {
                value = 1
            };
            
            // 参照型
            var classType = new ClassType
            {
                value = 1
            };

            Plus(valueType, classType);

            Assert.AreEqual(1, valueType.value);
            Assert.AreEqual(2, classType.value);
        }

        static void Plus(ValueType valueType, ClassType classType)
        {
            valueType.value += 1;
            classType.value += 1;
        }

        struct ValueType { public int value; }
        class ClassType { public int value; }
    }
}