【问题标题】:Cannot invoke a c# method requiring a Type parameter无法调用需要类型参数的 c# 方法
【发布时间】:2016-07-11 18:53:09
【问题描述】:

尝试解决这个问题:Attempting to use OOPFactory to parse 271 benefits using EligibilityBenefitDocument

这一次,我没有尝试直接使用对象,而是尝试使用库的不同部分将存在的内容写入 sql。

我正在尝试执行 OOPFactory.X12.ImportX12 类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using OopFactory.X12.Parsing;
using OopFactory.X12.Repositories;
using OopFactory.X12.Sql;
using System.IO;
using System.Diagnostics;
namespace OopFactory.X12.ImportX12
{
    class Program
    {
        enum testc { incrementme };
        static void Main(string[] args)
    {
        string dsn = ConfigurationManager.ConnectionStrings["X12"].ConnectionString;

        bool throwExceptionOnSyntaxErrors = ConfigurationManager.AppSettings["ThrowExceptionOnSyntaxErrors"] == "true";
        string[] segments = ConfigurationManager.AppSettings["IndexedSegments"].Split(',');
        string parseDirectory = ConfigurationManager.AppSettings["ParseDirectory"];
        string parseSearchPattern = ConfigurationManager.AppSettings["ParseSearchPattern"];
        string archiveDirectory = ConfigurationManager.AppSettings["ArchiveDirectory"];
        string failureDirectory = ConfigurationManager.AppSettings["FailureDirectory"];
        string sqlDateType = ConfigurationManager.AppSettings["SqlDateType"];
        int segmentBatchSize = Convert.ToInt32(ConfigurationManager.AppSettings["SqlSegmentBatchSize"]);

        var specFinder = new SpecificationFinder();
        var parser = new X12Parser(throwExceptionOnSyntaxErrors);
        parser.ParserWarning += new X12Parser.X12ParserWarningEventHandler(parser_ParserWarning);
        var repo = new SqlTransactionRepository<int>(dsn, specFinder, segments, ConfigurationManager.AppSettings["schema"], ConfigurationManager.AppSettings["containerSchema"], segmentBatchSize, sqlDateType);

        //var repo = new OopFactory.X12.Sql.SqlTransactionRepository(dsn,"test");
        //var repo = new OopFactory.X12.Sql.SqlTransactionRepository(dsn,new testc());

开箱即用,我收到错误“OopFactory.X12.Repositories.SqlTransationRepository”已过时:“使用 OopFactory.X12.Sql 库和命名空间”

为了对此做出回应,我在顶部添加了一个 using 子句以导入该命名空间并尝试直接调用该方法(如我对 repo 变量的注释调用中所见)。

  • 当我尝试将其转换为字符串时,它告诉我“'OopFactory.X12.Sql.SqlTransactionRepository....' 的最佳重载方法匹配有一些无效参数
  • 当我尝试传入一个枚举实例时,我也得到了这一点。

我的问题是:如何调用需要 System.Type 参数的方法?

如果你能告诉我他们实际期望传递到 SqlTransactionRepository 的方法签名中的内容,我一定会投票赞成前几个可以正确 t 点的响应

public SqlTransactionRepository(string dsn, Type identityType)
        : this(dsn, new SpecificationFinder(), new[] { "REF", "NM1", "N1", "N3", "N4", "DMG", "PER" }, identityType, "dbo")
    {
    }

【问题讨论】:

  • 您可能只是有一个错字,请注意您的错误消息中的SqlTransationRepository 拼写错误,让我相信这可能是一个错字。

标签: c# enums


【解决方案1】:

根据源码里面的文档(OopFactory X12 Parser

身份参数应该有:

所有标识列的类型

它支持intlong,这意味着你应该通过:

typeof(int)

typeof(long)

希望对你有帮助!

【讨论】:

  • 这解决了问题,非常有帮助!谢谢!
【解决方案2】:

假设你的类型是人,

你可以使用 typeof(Person):

 SqlTransactionRepository(dsn, typeof(Person));

或者获取person实例的类型:

 Person p = new Person();
 SqlTransactionRepository(dsn, p.GetType());

【讨论】:

    猜你喜欢
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多