RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-248572

Kir_Antipov's questions

Martin Hope
Kir_Antipov
Asked: 2020-02-16 01:01:56 +0000 UTC

C# 的私钥解密/JSEncrypt 模拟

  • 0

我被迫将一段代码从 JS 翻译成 C#,在那里我偶然发现了这样一个时刻:

var decrypt = new JSEncrypt();
decrypt.setPrivateKey("Здесь Base64-строка, представляющая приватный ключ");
var result = decrypt.decrypt("Здесь Base64-строка, представляющая зашифрованный текст");

而且由于某种原因,我在本机中找不到紧凑的东西.NET:所有标准工具都要求提供xml-format 的密钥,以创建您需要从密钥字符串(等)中提取某些数据的modulus密钥exponent...


一般来说,问题是:可以使用哪些工具来解密带有格式的私钥的文本Base64?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-02-01 12:26:04 +0000 UTC

检查对象状态的最佳方法

  • 2

我们先想象一个类似的类:

public class Vasya
{
    public void FreezeWater() => ...

    public void WalkOnWater() => ...
}

也就是说,我们的Vasya可以冻结水,也可以尝试在上面行走。在冰上行走并没有什么困难,所以一个类似的假设代码:

var vasya = new Vasya();
vasya.FreezeWater();
vasya.WalkOnWater(); 

将毫无问题地运行,但以下块:

var vasya = new Vasya();
vasya.WalkOnWater(); 

会扔给我们一些VasyaDrownedException,因为他Vasya没有把水带到适合走路的聚集状态。

既然我们不想这么突然和 Vasya 说再见,我们可以像这样修补这个类:

public class Vasya
{
    public bool IsWaterFrozen{ get; private set; } = false;

    public void FreezeWater() 
    {
        IsWaterFrozen = true;
        ...
    }

    public void WalkOnWater() 
    {
        if (!IsWaterFrozen)
            throw new InvalidActionException("Water is not frozen!");
        ...
    }
}

在这种情况下,试图淹死 Vasya 的臭名昭著的尝试会抛出我们已经预料到的异常,所以我们可以到此结束,但问题是:我们的 Vasya 是一个非常鲁莽的物体,所以他在水中跑了几千次。第二。因此,我们每秒有一千个额外的检查和一千个假设的异常(我们知道,抛出异常并不是一个便宜的操作)

这种经常被调用的方法(所以它的性能很关键)的情况对我来说似乎是不可接受的。

理论上,您可以像这样解决这种情况:

public class Vasya
{
    public bool IsWaterFrozen{ get; private set; } = false;
    private Action _walkOnWater ;

    public Vasya() => _walkOnWater = ThrowWaterIsNotFrozen;

    public void FreezeWater() 
    {
        _walkOnWater = SuccessfullyWalkOnWater;
        IsWaterFrozen = true;
        ...
    }

    public void WalkOnWater() => _walkOnWater();

    private void ThrowWaterIsNotFrozen() => throw new InvalidActionException("Water is not frozen!");

    private void SuccessfullyWalkOnWater() => ...
}

也就是说,我们通过只更改一次调用上下文来保存方法免于不断检查

但是在这里我还有一个问题:
额外的委托调用不会比检查布尔标志更昂贵吗?


总的来说,划一条线,问题是:如何组织一个方法调用更正确,它的逻辑取决于另一个方法的调用,而且它的性能对我们来说非常非常关键

c#
  • 3 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-01-30 00:23:58 +0000 UTC

奇怪的窗口调整大小 Windows 10,大 DPI

  • 2

一般来说,问题是这样的:

有以下窗口:

窗户

属性如下:

  • FormBorderStyle = FixedSingle
  • 开始位置=中心屏幕
  • 控制框 =假
  • 帮助按钮 =假
  • 最大化框=假
  • 最小化框 =假
  • 最高=真
  • 没有与绘制/调整表单大小相关的操作

对于每个人,它都正确显示(如屏幕截图所示)。
但是,一个人给我写了以下内容:

请使自定义排序窗口变大和/或将对话框退出代码正确分配给窗口按钮 - 它们在大 DPI 中不可见,并且几乎没有办法显示它们或使用加速键“按下”

我让他发一张问题的截图,看到如下:

问题

它清楚地表明由于某种原因客户区的大小相当缩小,所以按钮和表单的右侧对我来说是一个未知的方向

发生了什么事,这是为什么……我不知道¯\_(ツ)_/¯


所以问题是:

  1. 为什么会发生这种情况(归咎于 Windows 10、高 DPI 或其他原因,为什么)?
  2. 如何解决?
.net
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-12-09 08:35:05 +0000 UTC

自动将 NuGet 包 (VSIX) 添加到项目中

  • 3

同志们!

遇到了这个问题:

为 编写了一个扩展Visual Studio,它与库协同工作,这也是我编写的

我希望能够自动将我的库添加到打开的项目中(当然,在最终用户的许可下。省略这个)

以哪种方式寻找解决此问题的方法?


添加。信息:

  • 该库是为.NET Frameworkand单独编译的.NET Core (.NET Standart它没有成功),这使任务有点复杂
  • 图书馆将在NuGet
  • Visual Studio 2017为(在那里测试)编写的扩展
  • 我也把图书馆打包在里面VSIX
c#
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-11-06 16:31:44 +0000 UTC

创建对象存储

  • 3

同志们,我遇到了以下问题:

我需要实现一个对象存储之类的东西,它会为每个用户提供一个指定对象的实例

我将尝试用伪代码来解释:

// Добавим в хранилище правило создания объекта 
storage.Add("tmp", () => new Foo()); 

{
    // В хранилище пока нет сгенерированных объектов
    // Так что создаётся новый, сохраняется и возвращается 
    Foo tmp0 = storage["tmp"];
}

// Здесь ссылка на tmp0 уже недействительна 
// Так что единственная ссылка на тот созданный объект лежит внутри хранилища 
// Возвращаем тот же объект, что был в tmp0
Foo tmp1 = storage["tmp"];

// Тот объект, что был создан для tmp0, а теперь хранится в tmp1, уже занят 
// Так что создаём новый объект, сохраняем его в хранилище и его же и возвращаем 
Foo tmp2 = storage["tmp"];

也就是说,当tmp0包含对同一对象的引用的存储范围结束时,它不会将其删除,而是将其保存到下一次对类似对象的请求为止。

所以逻辑是这样的:

  1. 按键请求对象
  2. 如果存储中没有已经创建的对象,则根据给定的规则生成,保存然后返回。否则:
  3. 检查每个创建的对象是否在用户代码中被引用。如果不是(即唯一的链接位于存储库本身) - 返回找到的对象

我需要这种行为的原因如下:创作Foo是一个费力的过程。此外,Foo它不是线程安全的,因此每个用户Foo必须有自己唯一的实例,这些实例可能之前已经创建和使用过。

似乎在任何地方都没有对对象的引用的“计数器”,因为垃圾收集器并不关心对特定对象的引用已经在那里声明了多少次。重要的是是否有这样的链接

所以我什至不知道是否有可能实现这样的东西C#......


升级版:

我无法选择要打勾的答案,因为iluxa1810和默认语言环境的答案对于一般情况更正确。但是,在我非常具体的任务框架内,约翰的回答中描述的方法......

c#
  • 3 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-11-02 11:31:06 +0000 UTC

选择给定的单词之一

  • 6

我需要在字符串中定义N 个给定单词中的一个。例如,让我们采取以下措施zero:.onetwo

部分地,这个表达式有助于解决这个问题:

/\b(?:zero|\.one|two)\b/

但是有一个问题:它没有定义.one,因为它以非单词字符(.)开头

这种情况的正确表达应该是什么?

регулярные-выражения
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-10-30 21:47:34 +0000 UTC

如何编写一个对所有数字类型都适用的方法/类?

  • 16

假设我想描述generic一个充当计算器的 -class,以便它对所有数字类型都以相同的方式工作。那些。:

  • 字节
  • 字节
  • 短的
  • 超短
  • 整数
  • 单位
  • 长
  • 乌龙
  • 漂浮
  • 双倍的

任务的复杂性在于,尽管所有这些类型都通过为其算术运算实例的定义而联合起来,但是,它们不继承任何类型的公共接口IArithmetical, INumber。而且其中的where 约束C#也不允许我们描述如下内容:

public static void Add<T>(T A, T B) where T : +, -, *, /, % ...

所以编译器不能确定利用该方法的所有可能类型都定义了正确的操作。

这会产生如下代码:

public class Calculator<T>
{
    public T Add(T A, T B) => A + B;
    public T Sub(T A, T B) => A - B;
    public T Mul(T A, T B) => A * B;
    public T Div(T A, T B) => A / B;
    public T Mod(T A, T B) => A % B;
}

唉,根本无法编译:由于上述原因,会抛出错误CS0019


那么在这种情况下该怎么办呢?一般来说,是否有可能C#描述generic一个可以与数字一起使用并且只能与它们一起使用的类/方法?

c#
  • 3 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-10-19 12:25:27 +0000 UTC

为 .NET 和 .NET Core 构建项目

  • 3

在编写代码对 .NET Framework 和 .NET Core 都有效的库时,您必须创建两个不同的项目,它们具有自己的依赖项和几乎相同的代码。

目前的情况(需要单独更新相邻项目的代码并单独构建)不太适合我。即使我编写了一个脚本来自动执行此操作,我也知道有更好的解决方案。您可以在 Visual Studio 中以某种方式修改项目本身以实现这些目标:

  • 选择目标平台的能力
  • 根据它,以 , 的精神指示字符NETCORE,NET(按类型DEBUG),以便在某些地方更改特定于平台的代码
  • 根据它,使用某些包

组织解决问题的最佳方法是什么?

c#
  • 2 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-30 00:03:13 +0000 UTC

指定结构位域的大小

  • 10

为了方便使用System.Double ( float64) 类型的数字,我想描述一个类似的结构:

// cpp code
union float64
{
    double x;
    struct
    {
        unsigned long long mant : 52;
        unsigned long long exp  : 11;
        unsigned long long sign : 1;
    };

    float64(double val) { x = val; }
};

float64 f = -4.0;
// f.mant == 0
// f.exp == 1025 (- 1023 == 2)
// f.sign == 1

换句话说,我需要由IEC 60559:1989 (IEEE 754) 标准描述的浮点数的底线,可以快速访问

这C++很容易用位域来表示。但是C#,我无法弄清楚如何(优雅地)执行此操作:MarshalAsAttribute.SizeConst的使用仅对字符串和数组有效

所以到目前为止我看到的唯一选择是使用fixed-fields,然后我需要的数字将从中加载。但是这个解决方案对我来说似乎有点麻烦......


是否可以使用 C# 指定特定大小的位域,如果可以,如何执行此操作?

c#
  • 2 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-29 20:46:48 +0000 UTC

使用通用中间语言

  • 3

最近,为了了解我每天工作的一切,用CIL编写变得非常有趣)

在这方面,出现了一个问题:是否有任何IDE用于在 pure 上开发应用程序IL,以及应该为更详细的研究准备什么(因为到目前为止,我的武器库中只有我之前读过的直觉,IL以及维基百科上带有列表说明的页面)

到目前为止,我只找到了 Visual Studio 的扩展,但它只允许您将指令集成IL到代码中C#,F#或者VB,这不是我希望看到的¯\_(ツ)_/¯

.net
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-29 20:37:34 +0000 UTC

使用 CIL 获取文字(常量)的值

  • 5

假设我们在编译的程序集中有一些常量。让我们举一个例子来说明Math from类mscorlib.dll和常量Math.PI

如果以-code的形式查看源码IL,那么我们会看到如下的字段声明:

.field public static literal float64 PI = float64(3.1415926535897931)

也就是说,实际上,它PI是一个标记为文字的公共静态字段
。正是因为后者,ldsfld关于Math.PI

因此,以下代码将不起作用:

.method public static float64 GetPi() cil managed
{
    .maxstack 1
    ldsfld float64 [mscorlib]System.Math::PI
    ret
}

当被调用时GetPi(),我们会得到一个运行时错误:

System.MissingFieldException:“找不到字段:'System.Math.PI'。”

在这方面,我有一个问题:是否可以通过一般手段从程序集中提取文字的值CIL,如果可以,如何做到这一点?


PS - 我非常清楚,当IL从指令创建 -code 时,例如C#常量值会立即被替换,所以:

return a * Math.PI;

将转换为:

ldloc a
ldc.r8 3.1415926535897931
mul
ret

但是,是否有一条CIL指令仍然可以提取常量字段的值仍然很有趣

.net
  • 2 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-17 00:47:30 +0000 UTC

数组式初始化

  • 2

我正在写array-like一个类,所以我希望初始化我的类的实例的过程尽可能接近数组的通常初始化

就在这个问题上:
我们可以一次设置数组值,用花括号:

int[] a = new int[] { 1, 2, 3 };

要在自定义类中实现此行为,您需要实现方法Add,然后是以下代码:

MyClass my = new MyClass() { 1, 2, 3 };

实际会部署在

MyClass my = new MyClass();
my.Add(1);
my.Add(2);
my.Add(3);

但是,正如我所说,这将需要创建一个我想避免的公共方法,因为它不符合类的逻辑Add


到目前为止,我看到了一个解决问题的方法:

创建一个方法Add,但是给它添加BrowsableAttribute(false)属性,这样普通用户至少在可用列表中看不到它

但是,也许有一个更优雅的解决方案,我想问你。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-15 01:08:23 +0000 UTC

通过掩码扩展 IEnumerable<T>

  • 3

说到Linq-one-liners)

一般来说,有这样一个任务:
有IEnumerable<string>一个包含一些行。还有int[],它包含上述集合中应插入空行的位置

例子:

// IEnumerable<string> collection:
"Some"
"Strings"
"To"
"Test"
"Method"

// int[] mask:
1
2
4

// IEnumerable<string> result:
"Some"
""
""
"Strings"
""
"To"
"Test"
"Method"

美妙之Linq处在于在没有任何额外变量和显式循环的情况下转换集合。但是,如果不引入一个新的变量,我就无法解决这个问题,所以我想问你:哪个解决方案会更优雅?)

我的实现:

脑袋上:

int i = 0;
List<string> result = new List<string>();
foreach (string x in collection)
{
    while (mask.Contains(i)) 
    {
        result.Add(string.Empty);
        ++i;
    }
    result.Add(x);
    ++i;
}

相同,但有 SelectMany:

int i = 0;
IEnumerable<string> result = collection.SelectMany(x => {
    List<string> part = new List<string>();
    while (mask.Contains(i))
    {
        part.Add(string.Empty);
        ++i;
    }
    part.Add(x);
    ++i;
    return part; });

升级版:

这在这类任务中通常很重要,所以我澄清一下:它mask是一个有序数组

c#
  • 2 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-11 23:22:57 +0000 UTC

类的 PtrToStructure 类比

  • 4

同志们,下面的问题让我很感兴趣:

假设我们有一个为了结构起见的例子,System.Drawing.Point
我们可以很容易地玩弄它,如下所示:

// Инициализируем нашу структурку
Point point = new Point(2, 3);

// Получаем ее адрес
Point* pointer = &point;

// Получим ее данные
int x = ((int*)pointer)[0]; // 2
int y = ((int*)pointer)[1]; // 3

// Получаем ту же структуру, разыменовав указатель
Point copied = *pointer;

// Или так (получаем нулевую `Point` по указателю)
copied = pointer[0];

// Или даже так
copied = Marshal.PtrToStructure<Point>(new IntPtr(pointer));

一般来说,有了指针,我们可以很容易地显式获取结构


现在让我们从值类型转移到引用类型,也就是说,我想谈谈类的类似机制

对类实例进行操作,实际上是对它们的引用进行操作,也就是说,收到一个指针后,我们会收到一个指向某个内存区域的链接的指针,在这里可以找到对象数据

也就是下面的伪代码:

// Обозначим instance'ы классов
MyClass my0 = new MyClass { A = 2 };
MyClass my1 = new MyClass { A = 3 };

// Некоторые действия
IntPtr* ptr0 = ...;
IntPtr* ptr1 = ...;

IntPtr tmp = *ptr0;

ptr0[0] = ptr1[0];
ptr1[0] = tmp;

Console.WriteLine(my0.A); // 3
Console.WriteLine(my1.A); // 2

其实类似于简单的改变地方的变量


现在主要的问题是:有了指针,我怎样才能得到一个对象,就像在结构的情况下一样?

问题是

  • 创建指向类的指针 - 不可能(错误CS0208)
  • 而且Marshal.PtrToStructure也只为结构设计

所以我正在寻找这样的东西:

IntPtr* pointer = ...;
// Я знаю, что это не работает, это просто псевдо-код
MyClass my = *((MyClass*)pointer);
my = Marshal.PtrToClass<MyClass>(new IntPtr(pointer));

实际上,这是否可能(C#我认为根本不可能),如果可以,如何?

即使是最疯狂的想法也受到欢迎!

c#
  • 3 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-09-03 03:06:28 +0000 UTC

在运行时编译和重新加载程序集

  • 3

同志们,我简单介绍一下情况:

我正在编写一个小型可扩展应用程序。为了让用户添加自己的功能,在程序的框架内,我创建了他们必须继承其类型的接口

同时,我还在应用程序内部进行了代码生成,以提供更大的便利。


假设我们有一个这样的界面:

namespace MyAppNamespace
{
    public interface INamed
    {
        string Name { get; }
    }
}

此外,在应用程序内部生成以下代码(并放入resultCode):

using MyAppNamespace;

public class Wrapper : INamed
{
    public string Name { get { return "Test"; } } 
}

我正在编译这个:

// Указываю, что на выходе мне не нужен исполняемый файл, а также что сборку нужно создать по указанному пути
CompilerParameters options = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = false, OutputAssembly = $"{SavePath}.dll" };
options.ReferencedAssemblies.Add(new Uri(GetType().Assembly.CodeBase, UriKind.Absolute).LocalPath); // Добавляю ссылку на текущую сборку для наследования интерфейса
// Получаю результат компиляции
CompilerResults results = new Microsoft.CSharp.CSharpCodeProvider().CompileAssemblyFromSource(options, resultCode);
// Опустим проверки
// Загружаю сборку из массива байт (так как сам файл потом, возможно, может быть удален)
Assembly asm = Assembly.Load(File.ReadAllBytes(results.PathToAssembly));
// Создаю instance типа, который в сборке унаследован от нужного интерфейса
INamed named = (INamed)Activator.CreateInstance(asm.DefinedTypes.First(x => x.ImplementedInterfaces.Contains(typeof(INamed))).AsType());  
asm = null;
GC.Collect(); // Вычищаю сборку из памяти. По крайней мере, я хочу в это верить
return named;

之后,我可以安全地访问named.Name.
一段时间后,该对象被“丢弃”,直到用户明确表示他们想要使用它。在这种情况下,它需要从程序集中重新提取

但是有一个胖但是:如果我尝试以相同的方式加载程序集并再次从中获取类型,那么视觉上该过程将是成功的,但是当我尝试访问它时,named.Name会发生错误,即未找到定义它的程序集


我可以更正应用程序逻辑并一次性读取(也许它会更正确),但现在理解为什么会发生这种情况对我来说很重要:在第一次阅读时,一切都像发条一样工作,而在第二次阅读以相同的方式从同一个文件中,该过程是成功的,但是对象结果是“损坏”,因为当我尝试访问其属性时,我会收到一个错误,指出无法加载程序集

c#
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-08-26 04:55:39 +0000 UTC

StringDictionary 的架构特点

  • 3

背景:

我们都非常熟悉标准Dictionary<TKey, TValue> 类型,以及它的属性,如果您尝试通过不存在的键访问元素,则会抛出KeyNotFoundException。
这对每个人都很熟悉,并且这种行为对于值字典来说是预期的。

最近,我分析了一个引发NullReferenceException的代码,从逻辑上讲,这是不可能的。

在调试之后,我发现了以下事情:一个人
在他的代码中使用了StringDictionary(顺便说一句,这很令人愉快,因为我知道有很多 .NET 程序员从未研究过System.Collections.Specialized)并且忘记了通过指定键检查字符串是否存在,因此字典静默返回null,稍后代码崩溃,因为null字典中应该不存在具有该值的行,并且不暗示对此的检查

在标准Dictionary和上述异常的创建的情况下,这个错误会更容易捕获,但是,它有一个StringDictionary稍微不同的“意识形态”,所以它通过一个不存在的键返回null(顺便说一下,不调用该方法与带有-值ContainsKey的指定键存在的字符串无法区分)null


实际上,问题本身:

为什么在设计的时候,他们StringDictionary脱离了大家熟悉的字典架构,而不是逻辑上抛出相应的异常,而是直接返回null?

在我看来,这样的决定应该有一些严肃的事实来支持。根据我的猜测:由于它是StringDictionary为快速(O(1))在字典中搜索字符串而创建的,也就是说,在这种情况下速度很关键,他们决定忽略抛出异常,因为这不是最快的操作)
但是,这只是我的猜猜,我想听听您的意见/查看有关此问题的链接)

.net
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-07-03 02:31:54 +0000 UTC

简单的 JS 图像编辑器

  • 0

同志们,出现了以下问题:我目前在一个需要简单客户端图像编辑器的站点上工作。

那里的必要功能:

  • Выделение矩形区域
  • текста在图像区域周围添加并进一步移动它
  • откатить创造的可能性


通常情况下,JS已经为每个任务编写了一个框架,但是我没有找到任何与所描述的任务相对应的有用库。我现在正在尝试自己实现它,但是我遇到了很多陷阱,我担心实现最终会弯曲并且不会很快¯\_(ツ)_/¯

如果您有任何库或想法谨记执行,我将不胜感激)

javascript
  • 2 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-06-30 18:21:44 +0000 UTC

是否可以使用不同数量的参数创建多个 JS 类方法重载?

  • 1

这似乎是一个平庸的问题,但我遇到了一个事实,我不知道如何摆脱这种情况:假设我们有这样一个“类”:

function TestClass() {
    this.method = function(index) {
        alert("index");
    };
    this.method = function(x, y) {
        alert("x, y");
    };
}

让我解释一下我想要做什么:

var test = new TestClass();
test.method(1); // Вылезает alert с текстом "index"
test.method(1, 1); // Вылезает alert с текстом "x, y"

也就是说,我正在尝试创建一个具有多个重载的内部方法。很明显,上面的语法只是简单地覆盖了这个即兴类引用的函数。试图这样做:

function TestClass() {
    function method(index) {
        alert("index");
    }
    function method(x, y) {
        alert("x, y");
    }
    this.method = method;
}

但是,仍然使用TestClass().method(...)最后指定的重载。

也许这个问题已经被问过了,但我无法谷歌,所以请指导我或分享解决此问题所需的知识)

javascript
  • 3 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-06-13 16:44:54 +0000 UTC

构建 VS 扩展,按字符串长度排序

  • 5

同志们,问题如下:我习惯于在我的项目中排序using并且(不仅是)按字符串的长度排序。也就是说,这种代码:

using System.Collections.Generic;
using System;
using System.Linq;
using System.IO;

我一定会改成:

using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

只有这样我才能冷静下来)

所以。我有点厌倦了手动执行此操作,所以我想问:是否有任何轻量级扩展(我怀疑ReSharper它可以,但我不考虑它)Visual Studio 2017可以按长度对所选行进行排序?

visual-studio-2017
  • 1 个回答
  • 10 Views
Martin Hope
Kir_Antipov
Asked: 2020-06-12 03:36:47 +0000 UTC

GetILAsByteArray() 方法如何工作?

  • 9

该方法MethodBody.GetILAsByteArray();以字节表示形式返回 IL 代码,这一点很清楚。但是,我在这个方法的操作描述中没有找到细节MSDN:它是返回我描述的“逐字”指令,还是这个函数完全返回将要执行的指令?

让我解释:

  • 在调试模式下,编译器不会以任何方式优化代码,因此
    可执行指令与
    程序员自己描述的相同。
  • 在发布模式下,编译器内联、弃用并通常
    更改许多内容,因此最终的可执行指令可能
    与最初描述的内容大不相同。

它是否会以任何方式影响GetILAsByteArray()编译模式,或者此方法是否总是返回“逐字”方法语句?

c#
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5