小编Ond*_*cek的帖子

你调用的对象是空的.C#GetProperty()

我有一个控制台应用程序,我试图动态获取对象属性的值:

  class Program
  {
    static void Main(string[] args)
    {
      DtoCartaCompromiso test = new DtoCartaCompromiso() { CodProducto = 1,
        DescProducto = "aaa",
        CodProveedor = 2,
        DescProveedor = "bbb",
        FechaExpiracion = DateTime.Now,
        FechaMaxEntrega = DateTime.Now,
        NumLote = "22" };

      var testlist = new List<DtoCartaCompromiso>();
      testlist.Add(test);

      List<Header> columns = new List<Header>() { new Header{Name= "CodProducto"},new Header{Name=  "NumLote"},new Header{Name=  "DescProducto"},new Header{Name=  "CodProveedor"},new Header{Name=  "DescProveedor"},new Header{Name=  "FechaExpiracion"},new Header{Name=  "FechaExpiracion"},new Header{Name=  "FechaMaxEntrega"} };

      foreach (var d in testlist)
      {
        foreach (var col in columns)
        {
            string …
Run Code Online (Sandbox Code Playgroud)

c# reflection

3
推荐指数
1
解决办法
5933
查看次数

Interlocked.Increment vs lock in debug vs release mode

我正在测试我的计算机架构上的行为Interlocked.Increment和lock行为,因为我阅读了本文中的以下几行。

正如用 Interlocked.Increment 重写的那样,该方法应该执行得更快,至少在某些架构上是这样。

使用以下代码,我确信在我的项目中检查锁是值得的。

var watch = new Stopwatch();
var locker = new object();
int counter = 0;

watch.Start();
for (int i = 0; i < 100000000; i++)
{
    lock (locker)
    {
        counter++;
    }
}
watch.Stop();
Console.WriteLine(watch.Elapsed.TotalSeconds);

watch.Reset();
counter = 0;

watch.Start();
for (int i = 0; i < 100000000; i++)
{
    Interlocked.Increment(ref counter);
}
watch.Stop();
Console.WriteLine(watch.Elapsed.TotalSeconds);
Run Code Online (Sandbox Code Playgroud)

我越来越有近似值稳定的结果2.4S用于锁定和1.2秒的互锁。然而,我惊讶地发现在发布模式下运行此代码仅将 Interlocked 的值提高到大约0.7 秒,并且锁定时间保持不变。这是为什么?在释放模式下锁定不是互锁时如何优化互锁?

c# locking interlocked release-mode debug-mode

3
推荐指数
1
解决办法
448
查看次数

字段'xxx'永远不会分配给,并且始终具有其默认值null

我的错误: Field 'StockManagement.LargeItems1.largeS' is never assigned to, and will always have its default value null 我的代码:

namespace StockManagement
{
    class LargeItems1
    {
        private Stack<string> largeS;

         public LargeItems1()
        {
            Stack<string> largeS = new Stack<string>();
        }
        public void LargeItemsAdd()
        {
            string usersInput2, tempValue;
            int tempValueI = 0;
            bool attempt = false;//, whichOne = false;
            Console.WriteLine("Would you like to remove or add an item to the storage area \n Reply add OR remove");
            string usersInput = Console.ReadLine();
            usersInput = usersInput.ToLower();

            if (usersInput.Contains("remove"))
            { …
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
1
解决办法
6596
查看次数

等待自定义功能

我试图了解C#中新的异步功能,到目前为止,我注意到的最奇怪的事情是异步功能的每个示例都有一个等待框架中定义的另一个异步函数的函数,但没有一个有自定义代码.

例如,我想要的是从文本文件中的每一行创建一个对象,但是异步,以便UI线程不会冻结:

async Task Read()
{
    string[] subjectStrings = File.ReadAllLines(filePath);
    for (int i = 0; i < subjectStrings.Length; i++)
    {
        Task<Subject> function = new Task<Subject>(code => new Subject((string)code), subjectStrings[i]);
        try
        {
            Subject subject = await function;
            subjects.Add(subject);
        }
        catch (Exception ex)
        {
            debugWriter.Write("Error in subject " + subjectStrings[i]);
            continue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我定义了一个Subject基于文本文件中的行创建新对象的任务,然后等待此任务.如果我这样做,调试器就会到达该await行,然后停止.据我所知,没有更多的代码运行.

如果我使用的是旧的异步功能,我只需使用Task.ContinueWith()并添加一个回调lambda,将主题添加到列表中,然后继续使用.

所以我的问题是:

  1. 为什么这段代码不起作用?您如何制作不使用任何异步方法本身的自定义异步方法?
  2. 你应该如何使用异步方法?await除非你处于异步函数中,否则不能使用,并且你不应该在没有等待的情况下调用异步方法,那么如何从同步方法中调用该方法呢?

.net c# multithreading asynchronous

3
推荐指数
1
解决办法
797
查看次数

文件夹事件中的新文件

有人可以帮助我了解如何构建一个全天候运行的软件,可以收听特定文件夹(例如C:\ Actions),每次我在该文件夹中放置一个新文件时,软件都需要阅读和处理它.

如果文件夹中没有文件,软件不应该只做等待下一个文件.

文件示例(action1.txt)内容(1 + 1)

软件正在处理(1 + 1),将答案(2)保存到另一个文件夹并从"C:\ Actions \"文件夹中删除文件(action1.txt).

我知道如何读取文件并处理它..

我很难理解如何在文件夹中有新文件时如何触发软件,以及如何在不使用太多内存或导致内存泄漏的情况下24/7运行软件......

直到现在我已经以原始的循环方式使用它,每个60秒(睡眠)我正在检查文件夹中的新文件.那是无用的,不那么有效.

如果有人能帮我理解如何让它更有效,我会很高兴的.

非常感谢你

c# directory file-io events file

3
推荐指数
1
解决办法
4845
查看次数

C#自定义一元运算符重载

C#类是否从基类继承自定义运算符?我正在尝试以下代码:

class Person
{
    public int Age;

    public static Person operator ++(Person p)
    {
        p.Age++;
        return p;
    }
}

class Agent : Person {   }

static void Main(string[] args)
{
    Person p = new Person { Age = 23 };
    Console.WriteLine ( "Before increment : {0}" , p.Age );

    p++;
    Console.WriteLine("After increment : {0}", p.Age);

    Agent agent = new Agent { Age = 25 };
    Console.WriteLine("Before increment : {0}", agent.Age);

    agent++;
    Console.WriteLine("After increment : {0}", agent.Age);

}
Run Code Online (Sandbox Code Playgroud)

编译器告诉我,他无法显式地从Person转换为Agent.

我试过了 : …

c# operator-overloading

2
推荐指数
1
解决办法
662
查看次数

这个功能的"惯用"版本是什么?

试图了解围棋的心态.我编写了以下函数,查找文件名中包含日期的文件夹的*.txt文件,获取最新日期并返回该日期.

func getLatestDate(path string) (time.Time, error) {
    if fns, e := filepath.Glob(filepath.Join(path, "*.txt")); e == nil {
        re, _ := regexp.Compile(`_([0-9]{8}).txt$`)
        max := ""
        for _, fn := range fns {
            if ms := re.FindStringSubmatch(fn); ms != nil {
                if ms[1] > max {
                    max = ms[1]
                }
            }
        }
        date, _ := time.Parse("20060102", max)
        return date, nil
    } else {
        return time.Time{}, e
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有这个函数,这个函数的惯用版本会是什么?

go

2
推荐指数
1
解决办法
244
查看次数

在c#中将按位或运算符应用于十进制

在此代码中,我有如下要求:

decimal col;

if (condition)
{
    (decimal)col = (decimal)col | ((decimal)System.Math.Pow(2, 0)); 
}
Run Code Online (Sandbox Code Playgroud)

编译此代码时,我收到错误消息

Operator | cannot be applied to operands of type 'decimal' and 'decimal'
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?谢谢

c# bit-manipulation decimal

2
推荐指数
1
解决办法
2697
查看次数

如何获取目录中的文件列表

我在计算文件夹中的文本文件数时遇到了困难.我用这些命令来获取路径.现在我想计算文件夹中的文本文件数.

FolderBrowserDialog fbd = new FolderBrowserDialog();
DialogResult result = fbd.ShowDialog();

string files = fbd.SelectedPath;
textBox2.Text = files;
Run Code Online (Sandbox Code Playgroud)

c# file-io

2
推荐指数
1
解决办法
114
查看次数

如何在selenium webdriver中使用等待

如何使用c#在selenium webdriver中使用等待?我被要求不要使用我的测试经理的愚蠢声明.

System.Threading.Thread.Sleep(6000);
Run Code Online (Sandbox Code Playgroud)

c# selenium

2
推荐指数
2
解决办法
1万
查看次数