访问作为泛型类型传递的类属性

2023-12-12

我有两个类,它们被传递给序列化方法,我想在序列化方法中访问这些类的两个属性。问题是序列化方法参数作为泛型类型传递,我不知道在这种情况下如何访问传递的类的属性。下面的例子。

    public class MyClass1 
    {

            public string MyProperty1 { get; set; }

            //These properties are shared in both classes
            public bool Result { get; set; }
            public string EngineErrorMessage { get; set; }

    }
    public class MyClass2 
    {

            public string MyProperty2 { get; set; }

            //These properties are shared in both classes
            public bool Result { get; set; }
            public string EngineErrorMessage { get; set; }

    }


//The method is used to serialize classes above, classes are passed as generic types
    public void Serialization<T>(ref T engine)
            {
                try
                {
                 //Do some work with passed class
                 }
                catch (Exception e)
                {

                   //If Exception occurs I would like to write values to passed class properties, how to do that?
                   Result = false;
                   EngineErrorMessage = e.Message;
                }
    }

完整方法代码

     public void Submit<T>(ref T engine)
        {
            try
            {

                var workingDir = Path.Combine(Settings.FileStoragePath, Helpers.GetRandomInt(9).ToString());



                Directory.CreateDirectory(workingDir);
                var inputFile = Path.Combine(workingDir, Settings.InFileName);
                var outputFile = Path.Combine(workingDir, Settings.OutFileName);
                var deleteFile = Path.Combine(workingDir, Settings.DelFileName);

                try
                {



                    using (var stream = new FileStream(inputFile, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        Serializer.Serialize(stream, engine);
                    }


                    CheckStatus(outputFile);


                    using (var stream = new FileStream(outputFile, FileMode.Open, FileAccess.Read, FileShare.None))
                    {
                        engine = Serializer.Deserialize<T>(stream);                        
                    }


                }
                finally
                {
                    File.Create(deleteFile).Dispose();
                }
            }
            catch (Exception e)
            {
                //ToDo: Not implemented yet.
/*               Result = false;
               ErrorMessage = e.Message;*/
            }
        }

声明一个包含属性的接口Result and EngineErrorMessage。现在你有两个选择:

  1. 向序列化类型参数添加约束,以便只有从上述接口派生的类型才能序列化,或者
  2. 在你的 catch 块中尝试投射engine到上面提到的界面。如果转换成功,则写入属性值,否则不执行任何操作。

Sample:

public interface ISerializationErrorWriter
{
    bool Result { set; get; }
    string EngineErrorMessage { set; get; }
}

public class MyClass1 : ISerializationErrorWriter
{
    public string MyProperty1 { get; set; }

    public bool Result { get; set; }
    public string EngineErrorMessage { get; set; }
}

public class MyClass2 : ISerializationErrorWriter
{
    public string MyProperty2 { get; set; }

    public bool Result { get; set; }
    public string EngineErrorMessage { get; set; }
}

// Option 1:
public void Serialization_1<T>(ref T engine) where T : ISerializationErrorWriter
{
    try
    {
        //Do some work with passed class
    }
    catch (Exception e)
    {
        engine.Result = false;
        engine.EngineErrorMessage = e.Message;
    }
}

// Option 2:
public void Serialization_2<T>(ref T engine)
{
    try
    {
        //Do some work with passed class
    }
    catch (Exception e)
    {
        var serializationErrorWriter = engine as ISerializationErrorWriter;
        if(serializationErrorWriter != null)
        {
            serializationErrorWriter.Result = false;
            serializationErrorWriter.EngineErrorMessage = e.Message;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问作为泛型类型传递的类属性 的相关文章

  • 我可以避免使用泛型来避免急于解决特征实现的歧义吗?

    考虑以下 Rust 代码 use std collections HashMap use std hash Hash trait Foo
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio

随机推荐

  • 全套组合组合 3 套

    我需要生成组合三个不同子集所获得的完整组合集 Set 1 从 13 个元素的向量中选择任意 4 个数字 Set 2 从 3 个元素的向量中选择任意 2 个数字 Set 3 从 9 个元素的向量中选择任意 2 个数字 示例 A 组的向量 4
  • 将 DataContractSurrogate 与 WCF REST 结合使用

    如何将 DataContractSurrogate 用于我的 WCF REST 服务 使用 WebServiceHostFactory 托管 我没有看到添加一个的方法 即使我添加自定义 IOperationBehavior WebServi
  • 如何用C语言为AVR-Studio编写自定义reset()函数?

    所以我被分配了为 AVR 编译编写自定义 Reset 函数的任务 我得到了这个信息 Atmega128 和 Pic24e 在程序地址 0x0 处有复位中断 编写一个函数 Reset 来复位程序 我还听说强制系统重新启动的一个简单方法是发送它
  • 从多个源文件构建内核模块,其中一个源文件与模块同名

    是否可以从多个源文件构建一个内核模块 其中一个源文件与该模块同名 例如 我想使用以下源文件构建 mymodule ko mymodule cmymodule func c 这个 makefile 不起作用 Makefile obj m my
  • UILabel + IRR、KRW 和 KHR 货币符号错误

    我在将韩元 柬埔寨瑞尔和伊朗里亚尔的十进制转换为货币并将结果显示到 UILabel 文本时遇到问题 转换本身顺利进行 我可以在调试器中看到正确的货币符号 甚至 NSLog 也能很好地打印该符号 如果我将此 NSString 实例分配给 UI
  • ListView项目背景地狱

    因为复选框不是我的项目的选项 所以我希望可选项在选中时有背景 从 2 3 开始支持 我还没有设法解决这个问题 选择是正确的 但我在屏幕上看到的不是 随机行的随机颜色 拳头我有这个
  • React Router 无法与 Github Pages 一起使用

    我以前的网站仅在单击主页选项卡时显示主页 然后如果您单击我的导航栏品牌 它会显示 404 该网站在带有 npm start 的 create react app 上运行 但在这里不起作用 也不起作用在构建上 我不知道该应用程序出了什么问题
  • 使用 Apache poi 在堆叠条上方显示 SUM 值

    我目前正在研究功能 应该在 pptx 文件内生成堆叠图表 为此 我使用这里的代码 java 使用 APACHE POI 在 powerpoint 中创建图表 我做了一些修改 主要是我将分组设置为 堆叠 并将重叠设置为 100 因此子栏看起来
  • 测试 jQuery 可选择 capybara 或 selenium (ctrl + click)

    我正在使用 jQuery Selectable 来管理日历 这个功能很好用 只需进入测试自动化即可 我需要从日历网格中选择多个不连续的日期 我尝试了一些方法 但并不真正期望它们能起作用 date 2013 05 02 page execut
  • Verilog HDL ?操作员

    什么是 用 Verilog 做什么 例如 以下命令是什么意思 input first din input 7 0 din output 127 0 parity reg 127 0 parity wire 7 0 feedback assi
  • 排除 $lookup 聚合中的字段

    我正在查询 3 个要排除的集合 id输出中随处可见 我的输出是 id ObjectId 5b6aed5f9bcdb5d4ae64aef5 userID 1 skills id ObjectId 5b766b5f1365a4940bb6050
  • 产品设置中的自定义复选框,选中时显示自定义字段

    我目前正在使用 WooCommerce 开发 WordPress 电子商务网站 我在产品编辑页面常规设置中创建了一个自定义复选框 我还有一个代码片段 用于在单个产品页面中显示自定义文本字段 现在 我希望当为产品选中此自定义复选框 在其设置中
  • RealityKit – 如何以编程方式访问场景中的属性?

    我一直通过从库下载来使用现实作曲家和框架实体 我想访问对象的属性 以编程方式提供要在框架中显示的图像 在这里您可以看到有一个配置 我可以从我的画廊导入照片 但我想以编程方式完成它 也就是说 我想访问框架对象的该属性并以编程方式提供图像 但我
  • Spark-HBase - GCP模板(2/3) - json4s的版本问题?

    我正在尝试在 GCP 上下文中测试 Spark HBase 连接器并尝试遵循1 它要求使用 Maven 我尝试过 Maven 3 6 3 为 Spark 2 4 本地打包连接器 2 并在提交作业时出现以下错误Dataproc 完成 3 之后
  • PrimeFaces Piechart:工具提示未在我的本地环境中显示

    我重新创建了 primefaces 展示中显示的示例页面 http www primefaces org showcase ui chart pie xhtml 饼图成功显示 我可以调整饼图模型以获取可用的 setter 和 getter
  • 从 dynamodb 流读取数据

    我为我的发电机表设置了流 我正在按照文档中的示例程序从流中读取数据 http docs aws amazon com amazondynamodb latest developerguide Streams LowLevel Walkthr
  • 快照视频作为预览

    我在从视频中获取快照用作标题图像时遇到问题 下面有我当前使用的代码 但我得到的输出只是一个黑色图像 在控制台中我没有遇到任何问题 我将视频上传到我使用的文件服务器后执行此操作 let video videoPath find newVide
  • symfony 的 require_once

    我现在正在使用 php Symfony2 框架进行制作 并且我有以下代码 require once one file php require once another file php 等等 问题是 如何将这些不舒服的require语句 S
  • CSS 文本填充差异 Firefox 与 Chrome 等

    如果有人可以在以下方面提供帮助 我将不胜感激 因为我花了整个晚上在这个问题上没有结果 我有一个网站 我想在每篇文章之后修改标签外观 问题在于 firefox 版本 14 0 1 为文本提供了较小的高度 总 高度为 15px icnludin
  • 访问作为泛型类型传递的类属性

    我有两个类 它们被传递给序列化方法 我想在序列化方法中访问这些类的两个属性 问题是序列化方法参数作为泛型类型传递 我不知道在这种情况下如何访问传递的类的属性 下面的例子 public class MyClass1 public string