【问题标题】:Compiling Old Code in C# for SQL Assembly Errors在 C# 中为 SQL 汇编错误编译旧代码
【发布时间】:2011-08-18 22:27:15
【问题描述】:

我有刚刚反编译的旧代码(源代码丢失了,但我们拥有它)。

我现在正在尝试重新编译它,但出现以下错误:

 Error  1   'System.Data.SqlTypes.SqlBoolean.operator true(System.Data.SqlTypes.SqlBoolean)': cannot explicitly call operator or accessor   C:\NCESTableGenerator\NCESTableGenerator\db\OutputTableDAO.cs   89  32  NCESTableGenerator

关于以下代码:

 if (SqlBoolean.op_True(reader.GetSqlInt32(0) == 1))

 Error  3   Cannot convert type 'bool' to 'sbyte'   C:\NCESTableGenerator\NCESTableGenerator\Formatter.cs   172 30  NCESTableGenerator

关于以下代码:

 public static string GetEstimateFloatStr(double data, int sn, int num, ref bool roundedZero, ref bool lowN)
    {
        if (sn <= 30)
        {
            sbyte num1 = (sbyte) lowN;
            lowN = true;
            return "‡";

有什么想法吗?

【问题讨论】:

  • 反编译不会总是给你返回可以重新编译的代码。

标签: c# asp.net visual-studio assemblies compilation


【解决方案1】:

在第一行中,我认为将其重写为是安全的

if (reader.GetSqlInt32(0) == 1)

第二个是麻烦的线(看起来它可以因为返回而被删除)但如果你不能删除它,请将其更改为

Int16 num1 = (Int16)lowN;

char num1 = (char)lowN;

由于 Sbyte 不符合 MSDN 所列的 CLS-Compliant。

【讨论】:

  • 是的,我不知道为什么会在那里创建一个新的 var 然后返回,我想不出任何理由该行会完成什么
  • 是的,当您反编译代码时,您经常会看到非常奇怪的东西,但很难判断它的存在是有原因的还是只是反编译器中的错误/错误。
猜你喜欢
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 2013-11-23
  • 2015-03-17
  • 2011-10-06
  • 1970-01-01
相关资源
最近更新 更多