Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Reflection;
- using System.Linq;
- namespace Bar
- {
- static class Program
- {
- static void Main()
- {
- var a = Foo.GetConstStringValue<Fish>("Name");
- var b = Foo.GetConstStringValue<Cat>("Name");
- var c = Foo.GetConstStringValue<ImNotNamedHaha>("Name");
- }
- static class Foo
- {
- public static string GetConstStringValue<T>(string constName)
- {
- var objType = typeof(T);
- var constFields = objType.GetFields(BindingFlags.Static | BindingFlags.Public);
- var nameField = constFields.FirstOrDefault(x => string.Equals(x.Name, constName, StringComparison.Ordinal));
- string name = null;
- if (nameField != null)
- {
- name = nameField.GetRawConstantValue() as string;
- }
- // No name field, or value was empty
- if (string.IsNullOrWhiteSpace(name))
- {
- // Use name of type instead
- name = objType.Name;
- }
- return name;
- }
- }
- abstract class NamedEntity
- {
- // All people who derive from me really should
- // implement a "const string Name;" field. Plz.
- }
- class Fish : NamedEntity
- {
- public const string Name = "Fishy the fish";
- }
- class Cat : NamedEntity
- {
- public const string Name = "Whiskers";
- }
- class ImNotNamedHaha : NamedEntity
- {
- // public static const Name = "You'll never name me!";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement