很简单的问题:如何获取C#中所有操作数的列表?例:
{ "return", "break", "if", "case", "switch", ... };
Run Code Online (Sandbox Code Playgroud)
更难的问题:如何获取所有函数(类型,方法)的列表?
{ "string", "Math.Abs", "double.IsNaN", "int.ToString", ... };
Run Code Online (Sandbox Code Playgroud)
我想为CodeDom制作类似IntelliSense(非常糟糕和肮脏的东西)的东西.因此,用户可以通过将其代码添加到我的文本中来扩展软件的功能.我向他提供了一个函数体,其中包含一些他可以使用的参数,但是他也应该能够使用任何标准函数,例如,或者.他将代码输入RichTextEditor.我想让他更容易看到语法(突出显示已知的操作数,打开/关闭括号,函数参数).double.ToString()
Math.PI
我已经可以突出显示单词(参数)并且它看起来不错,但突出一切都很酷.而且我认为这是得到的操作数/ functins /类型/方法,我也不懂怎么办(我都可以操作数输入到阵列中自己OFC)的想法名单.
这个问题应该改写一下:如何制作我自己的IntelliSense?:-)
PS:快速潜伏甚至没有提供我一个单一的结果,我实际上有问题来制定我正在寻找的东西.
subj 有什么好的/简短的解决方案吗?
我能想到:
获取TopItem
索引(在VirtualMode
创建项目之前是否可以为空?),如果所需项目的索引较小,则不可见,否则获取底部可见索引(顶部索引+ listView.ClientSize.Height / GetItemRect(TopItem).Height
),如果所需项目的索引较多,则为无形的。否则可见。
以某种方式检测滚动并做一些事情。
或者也许有更简单的方法?
我正在使用Visual Studio C#这个错误出现在我的代码上,我不知道如何解决:
'int'不包含'Value'的定义,并且没有扩展方法'Value'可以找到接受类型'int'的第一个参数(你是否缺少using指令或汇编引用?)
无效的代码是
int Mod = randomizer.Next(2, 11);
int sum2 = randomizer.Next(2, 11);
modend = Mod * sum2;
ModLeft.Text = dividend.ToString();
ModRight.Text = divisor.ToString();
sum2.Value = 0;
Run Code Online (Sandbox Code Playgroud) 我无法理解这里泄漏的是什么
using GDI = System.Drawing;
public partial class MainWindow : Window
{
[DllImport("gdi32.dll")]
private static extern bool DeleteObject(IntPtr obj);
public MainWindow()
{
InitializeComponent();
var timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(50) };
timer.Tick += (s, a) =>
{
using (var bitmap = new GDI.Bitmap(1000, 1000))
{
var hbitmap = bitmap.GetHbitmap();
var image = Imaging.CreateBitmapSourceFromHBitmap(hbitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
image.Freeze();
DeleteObject(hbitmap);
}
};
timer.Start();
}
Run Code Online (Sandbox Code Playgroud)
bitmap
?弃置.hbitmap
?删除.image
?冷冻,但事实并非如此IDisposable
.
事实是,这个应用程序会崩溃(在运行约20秒后在我的电脑上)
System.Drawing.dll中发生了未处理的"System.OutOfMemoryException"类型异常
附加信息:内存不足.
有任何想法吗?
一个例子:
var a = $"Some value 1: {b1:0.00}\nSome value 2: {b2}\nSome value 3: {b3:0.00000}\nSome value 4: {b4:0.00}\nSome value 5: {b6:0.0}\nSome value 7: {b7:0.000000000}";
Run Code Online (Sandbox Code Playgroud)
这有点难以阅读.
我能做到
var a = $"Some value 1: {b1:0.00}\n" +
$"Some value 2: {b2}\n" +
$"Some value 3: {b3:0.00000}\n" +
$"Some value 4: {b4:0.00}\n" +
$"Some value 5: {b6:0.0}\n" +
$"Some value 7: {b7:0.000000000}";
Run Code Online (Sandbox Code Playgroud)
但是这里有一条评论说什么这将是多次调用string.Format
,我认为它会(不知道如何检查它,IL对我来说是一个黑盒子).
问题:可以吗?拆分长插值字符串有哪些其他选项?
我想连续读取本地驱动器上文件夹中的所有图像文件,然后进行一些处理,并在读取所有图像后结束程序。图像编号不是连续的,它们是随机的,但它们位于单个文件夹中。目前我的程序只能读取一个文件;请参阅下面的代码
string imagePath = Path.Combine(Freconfig.GetSamplesFolder(), "24917324.jpg");
Run Code Online (Sandbox Code Playgroud) 这有效:
int _counter;
readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
async void Button_Click(object sender, RoutedEventArgs e)
{
if (_semaphore.Wait(0))
{
Title = $"{ ++_counter}";
await Task.Delay(1000); // simulate work
Title = $"{ --_counter}";
_semaphore.Release();
}
}
Run Code Online (Sandbox Code Playgroud)
首次单击其他按钮后,将忽略单击,直到工作完成.Tittle
可以是1
或0
.
这不起作用
void Button_Click(object sender, RoutedEventArgs e)
{
if (_semaphore.Wait(0))
{
Test(); // moving code into separate method
_semaphore.Release();
}
}
async void Test()
{
Title = $"{ ++_counter}";
await Task.Delay(1000); // simulate work
Title = $"{ --_counter}"; …
Run Code Online (Sandbox Code Playgroud) 我能够从其他类的main方法更新类实例的私有成员.为什么我被允许这样做.它是否喜欢,它使用"ref"关键字?
我尝试使用"ref"关键字进行修改.
using System;
namespace Test2
{
class A
{
private int a=10;
public ref int M()
{
return ref a;
}
virtual public void display()
{
Console.WriteLine("class A");
}
}
class B:A
{
}
class Program
{
static void Main(string[] args)
{
B b = new B();
ref int a = ref b.M();
Console.WriteLine(a);
a = 20;
Console.WriteLine(b.M());
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud) //值是双倍的
有什么区别吗?编译器进行此计算的快速方法是什么?
value = System.Math.Abs(55.55);
this.Value = -value;
// or
this.Value = System.Math.Abs(value) * (-1);
Run Code Online (Sandbox Code Playgroud) 可能是一个非常愚蠢,但一个问题.可能是一个错误,但一个网站.
假设我有一个Log
静态方法的类Start
,Stop
和Log
.
如果有什么东西在调用,你会怎么称呼这个事件Log("...");
呢?
在过去的20分钟里,我偶然发现了一个正确的名字.Added
?Log
(但已有方法Log
)?什么是最直观易懂的事件名称?
c# ×10
.net ×1
c#-6.0 ×1
c#-7.0 ×1
double ×1
intellisense ×1
listview ×1
memory-leaks ×1
naming ×1
operands ×1
semaphore ×1
virtualmode ×1
winforms ×1
wpf ×1