一般に、オブジェクトがSystem.IFormattable
を実装する場合、LINQPadはプロパティを拡張するのではなく、ToString()
を呼び出します。
あなたはLINQPadのICustomMemberProviderを使用していますマイ拡張で拡張メソッドを書くことで、これをオーバーライドすることができます:
static class MyExtensions
{
public static object ForceExpand<T> (this T value)
=> value == null ? null : new Expanded<T> (value);
class Expanded<T> : ICustomMemberProvider
{
object _instance;
PropertyInfo[] _props;
public Expanded (object instance)
{
_instance = instance;
_props = _instance.GetType().GetProperties();
}
public IEnumerable<string> GetNames() => _props.Select (p => p.Name);
public IEnumerable<Type> GetTypes() => _props.Select (p => p.PropertyType);
public IEnumerable<object> GetValues() => _props.Select (p => p.GetValue (_instance));
}
}
し、このようにそれを呼び出す:
new NuGetVersion("1.2.3.4").ForceExpand().Dump();
はそれではありませんあなたは確かにあります公共の財産のみ? 'Dump()'は、よく知られている型から継承していないオブジェクトのパブリックプロパティをダンプするだけだと思います。 – flindeberg
はい、いくつかの公開プロパティがあります。ソースはここにあります:https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Versioning/NuGetVersion.cs –
私は[Joe](http:// stackoverflow。 com/users/46223/joe-albahari)がこれに答えることができます。 –