csharp クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する相关的知识,希望对你有一定的参考价值。

    /// <summary>
    ///     object型の拡張メソッドを管理するクラス
    /// </summary>
    public static class ObjectExtensions
    {
        private const string SEPARATOR = "\n"; // 区切り記号として使用する文字列
        private const string FORMAT = "{0}:{1}"; // 複合書式指定文字列

        /// <summary>
        ///     すべての公開フィールドの情報を文字列にして返します
        /// </summary>
        public static string ToStringFields<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;
            return string.Join(
                separator,
                obj
                    .GetType()
                    .GetFields( BindingFlags.Instance | BindingFlags.Public )
                    .Select( c => string.Format( FORMAT, c.Name, c.GetValue( obj ) ) ) );
        }

        /// <summary>
        ///     すべての公開フィールドの変数名を文字列にして返します
        /// </summary>

        public static string ToStringFieldNames<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj
                    .GetType()
                    .GetFields( BindingFlags.Instance | BindingFlags.Public )
                    .Select( c => "{" + c.Name + "}" ) );
        }

        /// <summary>
        ///     すべての公開フィールドの値を文字列にして返します
        /// </summary>

        public static string ToStringFieldValues<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj
                    .GetType()
                    .GetFields( BindingFlags.Instance | BindingFlags.Public )
                    .Select( c => "{" + c.GetValue( obj ) + "}" ) );
        }

        /// <summary>
        ///     すべての公開プロパティの情報を文字列にして返します
        /// </summary>
        public static string ToStringProperties<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj
                    .GetType()
                    .GetProperties( BindingFlags.Instance | BindingFlags.Public )
                    .Where( c => c.CanRead )
                    .Select( c => string.Format( FORMAT, c.Name, c.GetValue( obj, null ) ) ) );
        }

        /// <summary>
        /// すべての公開プロパティの変数名を文字列にして返します
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="separator"></param>
        /// <returns></returns>
        public static string ToStringPropertieNames<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj
                    .GetType()
                    .GetProperties( BindingFlags.Instance | BindingFlags.Public )
                    .Where( c => c.CanRead )
                    .Select( c => "{" + c.Name + "}" ) );
        }

        /// <summary>
        /// すべての公開プロパティの値を文字列にして返します
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="separator"></param>
        /// <returns></returns>
        public static string ToStringPropertieValues<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj
                    .GetType()
                    .GetProperties( BindingFlags.Instance | BindingFlags.Public )
                    .Where( c => c.CanRead )
                    .Select( c => "{" + c.GetValue( obj, null ) + "}" ) );
        }

        /// <summary>
        ///     すべての公開フィールドと公開プロパティの情報を文字列にして返します
        /// </summary>
        public static string ToStringReflection<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj.ToStringFields(),
                obj.ToStringProperties() );
        }


        /// <summary>
        ///     すべての公開フィールドと公開プロパティの変数名を文字列にして返します
        /// </summary>
        public static string ToStringReflectionHeaders<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj.ToStringFieldNames(),
                obj.ToStringPropertieNames() );
        }

        /// <summary>
        ///     すべての公開フィールドと公開プロパティの値を文字列にして返します
        /// </summary>
        public static string ToStringReflectionValues<T>( this T obj, string separator = null )
        {
            if (separator == null)
                separator = SEPARATOR;

            return string.Join(
                separator,
                obj.ToStringFieldValues(),
                obj.ToStringPropertieValues() );
        }
    }

以上是关于csharp クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する的主要内容,如果未能解决你的问题,请参考以下文章

csharp DataGridView中で,独自のクラスをバインドする方法。记述したコーディングと,あとはDataGirdViewのバインドしたい列のDataPropertyNameプロパティに,独自

markdown オブジェクトのプロパティディスクリプタを设定する

javascript 的JavaScriptのオブジェクトのプロパティとメソッド一覧および,その中身を确认

markdown オブジェクトのプロパティを列挙する

markdown オブジェクトのプロパティの値一覧を出す

csharp ジェネリッククラスに定义した静态フィールドは型パラメータ毎に定义される。