繁体   English   中英

在一个函数C#中返回不同的类型

[英]Return Different Types Within One Function C#

我正在创建一个项目数据管道,我需要从一个类中返回不同的类型

在这个课程中,我有很多字典可以保存和分隔要加载的元素/内容,但是我需要一种用单个字符串返回它们的方法...因为我不熟悉这些Type函数,所以我迷路了关于如何正确返回内容

我需要在一个单独的类中进行此操作,以便以后可以进行XML序列化

这就是我现在所拥有的

DataClass contents;
public T ReturnType<T>(string asset)
{
    if(typeof(T) == typeof(int))
    {
        return contents.Integers[Asset];
    }
    if(typeof(T) == typeof(float))
    {
        return contents.Floats[Asset];
    }
    if(typeof(T) == typeof(double))
    {
        return contents.Doubles[Asset];
    }
    return default(T);
}

它将允许我使用基本的Object类来解析内容,但我不希望任何内容在传输过程中丢失,因此我对使用此方法感到厌倦

我的问题是如何在使用此类功能进行序列化的类中返回某些类型的不同对象之一

如果我想使用以前的功能来获取类中的内容,例如

public Object someobject;
//button event handler to change the current object
//preferably this would be changed depending on the object i would be calling
//but this should do for showing how it is supposed to work
public void ChangeCurrentObject(event e)
{
    someobject = (Object)ReturnType<Object>("23rdObject");
}

它向名为“ ReturnType”的函数发送一个字符串,并返回一个具有各自字典的对象(即,int,float等)

在这种情况下,泛型只会帮助您不要为每种资产类型编写不同的方法。 您也可以使用此方法来使其更具模块化。

     static  class Assets
    {
        public interface IAssetHandler<out T> 
        {
            T GetAsset(string name);
        }

        private static readonly Dictionary<Type,object> _handlers=new Dictionary<Type, object>();

        public static T GetAsset<T>(string name)
        {

            object assetHandler;

            if(!_handlers.TryGetValue(typeof(T),out assetHandler))
            {
              throw  new Exception("No handler for that type of asset");
            }

            return (assetHandler as IAssetHandler<T>).GetAsset(name);

        }


        public static void RegisterAssetHandler<T>(IAssetHandler<T> handler)
        {
            _handlers[typeof (T)] = handler;
        }

    }


 public class IntAssetsHandler:Assets.IAssetHandler<int>
        {
            #region Implementation of IAssetHandler<out int>

            public int GetAsset(string name)
            {
                return 0;
            }

            #endregion
        }





        static void Main(string[] args)
        {
            Assets.RegisterAssetHandler(new IntAssetsHandler());

            Console.WriteLine(Assets.GetAsset<int>("test"));


        }

您可以使用外部类,根据需要设置属性类型,然后在函数中使用它。

public class MultipleOpjects
{
    public List<string> ObjectOne { get; set; }

    public List<object> ObjectTwo { get; set; }

    public object ObjectThree { get; set; }

}
public MultipleOpjects GetAnything()
{
    MultipleOpjects Vrble = new MultipleOpjects();
    Vrble.ObjectOne  = SomeThing1;
    Vrble.ObjectTwo = SomeThing2;
    Vrble.ObjectThree = SomeThing3;

    return Vrble;      
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM