C#实现定义一个通用返回值

 更新时间:2022年09月23日 08:46:33   作者:Csharp小记  
这篇文章主要介绍了C#如何实现自定义一个比较通用的返回值对象,然后使用泛型来传递需要return的数据。文中的示例代码讲解详细,感兴趣的可以了解一下

场景

很多情况下,我们在使用函数的时候,需要return多个返回值,比如说需要获取处理的状态以及信息、结果集等。最古老的时候,有用ref或者out来处理这个情况,但是需要定义处理等操作之类的,而且书写也不是很舒服,感觉就是不太完美;后来有了dynamic后,觉得也是个不错的选择,可惜也有很多局限性,比如:匿名类无法序列化、返回结果不够直观等。再然后就写一个结构化的对象来接收,但是如果每个方法都定义一个对象去接收的话,想必也会很麻烦;

需求

所以,综上场景所述,我们可以写一个比较通用的返回值对象,然后使用泛型来传递需要return的数据。

开发环境

.NET Framework版本:4.5

开发工具

 Visual Studio 2013

实现代码

[Serializable]
    public class ReturnResult
    {
        public ReturnResult(Result _result, string _msg)
        {
            this.result = _result;
            this.msg = _result == Result.success ? "操作成功!" + _msg : "操作失败!" + _msg;
        }
        public ReturnResult(Result _result)
            : this(_result, "")
        {
        }
        public Result result { get; set; }
        public string msg { get; set; }
    }
    [Serializable]
    public class ReturnResult<T> : ReturnResult
    {
        public ReturnResult(T _data)
            : base(Result.success)
        {
            this.data = _data;
        }
        public ReturnResult(Result _result, string _msg)
            : base(_result, _msg)
        {
        }
        public ReturnResult(Result _result, string _msg, T _data)
            : base(_result, _msg)
        {
            this.data = _data;
        }
        public T data { get; set; }
    }

    public enum Result
    {
        error = 0,
        success = 1
    }
public ReturnResult<string> GetMsg()
        {
            return new ReturnResult<string>("msg");
        }
        public ReturnResult<int> GetCode()
        {
            return new ReturnResult<int>(10);
        }
        public ReturnResult<Student> GetInfo()
        {
            Student student = new Student
            {
                id = 1,
                name = "张三"
            };
            return new ReturnResult<Student>(student);
        }

        public class Student
        {
            public int id { get; set; }
            public string name { get; set; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var result = GetCode();
            if (result.result == Result.success)
            {
                MessageBox.Show(result.msg + result.data);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var result = GetMsg();
            if (result.result == Result.success)
            {
                MessageBox.Show(result.msg + result.data);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            var result = GetInfo();
            if (result.result == Result.success)
            {
                MessageBox.Show(result.msg + Newtonsoft.Json.JsonConvert.SerializeObject(result.data));
            }
        }

实现效果

代码解析:挺简单的,也没啥可解释的。

到此这篇关于C#实现定义一个通用返回值的文章就介绍到这了,更多相关C#通用返回值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C#实现写入系统日志

    使用C#实现写入系统日志

    本文给大家分享的是作者使用使用C#实现将软件日志写入系统日志中的方法,十分巧妙,有需要的小伙伴可以参考下
    2018-01-01
  • WPF实现轮播图效果(图片、视屏)

    WPF实现轮播图效果(图片、视屏)

    这篇文章主要介绍了WPF实现轮播图效果,以下是一个使用WPF技术实现图片和视屏轮播的简单案例代码示例,文中有详细的代码示例,具有一定的参考价值,感兴趣的小伙伴可以自己动手试试
    2023-10-10
  • C#使用CryptoStream类加密和解密字符串的实现

    C#使用CryptoStream类加密和解密字符串的实现

    CryptoStream设计用于在内容以流的形式输出到文件时加密和解密内容,本文主要介绍了C#使用CryptoStream类加密和解密字符串的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • C#面向对象设计的七大原则

    C#面向对象设计的七大原则

    这篇文章主要为大家详细介绍了C#面向对象设计的七大原则,未读文章之前大家说一说都有哪七大原则,是不是七大原则都可以全部列出,想要了解的朋友可以参考一下
    2016-05-05
  • C#读取XML中元素和属性值的实现代码

    C#读取XML中元素和属性值的实现代码

    用C#读取xml有很多方式,这里我就先使用XmlDocument读取Xml,用一段代码遍历所有元素,并打印student的所有属性和子节点的值
    2013-04-04
  • C#中调用MySQL存储过程的方法

    C#中调用MySQL存储过程的方法

    这篇文章主要介绍了C#中调用MySQL存储过程的方法,涉及C#数据库操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#通过windows注册表获取软件清单的方法

    C#通过windows注册表获取软件清单的方法

    这篇文章主要介绍了C#通过windows注册表获取软件清单的方法,涉及C#针对注册表的访问读取与遍历操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • c# 实现雪花分形的示例

    c# 实现雪花分形的示例

    这篇文章主要介绍了c# 实现雪花分形的示例,帮助大家更好的利用c#绘制图像,感兴趣的朋友可以了解下
    2020-10-10
  • 谈C# using的用法与好处

    谈C# using的用法与好处

    这篇文章主要为大家详细介绍了C# using的用法与好处,具体分析了using指令调用的Dispose()方法,感兴趣的朋友可以参考一下
    2016-05-05
  • 详解c# 深克隆与浅克隆

    详解c# 深克隆与浅克隆

    这篇文章主要介绍了c# 深克隆与浅克隆的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论