小编Mic*_*kyD的帖子

声明式和命令式模式是一种设计模式吗?

我读了这句话

“C# 支持纯度模式”

...在 O'Reilly 的 C# 8.0 in a Nutshell 一书中。它继续说

“函数式编程的核心是避免使用值发生变化的变量,而支持声明式模式。”

我试图理解什么是声明式模式。但是我找不到声明模式作为设计模式的任何子类别。

任何人都可以向我解释声明式模式是否与行为、创建和结构等设计模式不同?

c# design-patterns declarative

4
推荐指数
1
解决办法
208
查看次数

在Parallel.ForEach中指定默认的MaxDegreeOfParallelism?

我们希望可选地控制并行循环中"线程"的数量,以避免压倒Web服务(例如).

是否可以MaxDegreeOfParallelismParallel.ForEach循环上指定自定义,还可以根据需要恢复为默认值?看似零(0)是一个无效的值MaxDegreeOfParallelism,而我希望它只是意味着"忽略".

换句话说,你能避免编写这种类型的代码吗?

int numParallelOperations = GetNumParallelOperations();
if (numParallelOperations > 0)
{
 ParallelOptions options = new ParallelOptions();
 options.MaxDegreeOfParallelism = numParallelOperations;
 Parallel.ForEach(items, options, i => 
 {
   Foo(i);
 });
}
else
{ 
 Parallel.ForEach(items, i => 
 { 
   Foo(i);
 });
}
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading task-parallel-library

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

如何在字符串中搜索单词(只是单词)?

我想在一个字符串中搜索一个单词.

但是,如果搜索到的单词在其他单词内,我不想得到结果.那是

  • 我希望这返回数字7(字母f的索引):

    findWord("Potato for you", "for")
  • 但我希望这返回-1(即未找到)

    findWord("Potato for you", "or")

如果我使用IndexOf,它将在单词"for"中找到子串"或".

有没有简单的方法来做到这一点?

char[] terminationCharacters = new char[] { '\n', '\t', ' ', '\r' };

//get array with each word to be taken into consideration
string[] words= s.Split(terminationCharacters, StringSplitOptions.RemoveEmptyEntries);

int indexOfWordInArray = Array.IndexOf(words, wordToFind);
int indexOfWordInS = 0;
for (int i = 0; i <= indexOfWordInArray; i++)
{
    indexOfWordInS += words[i].Length;
}
return indexOfWordInS;
Run Code Online (Sandbox Code Playgroud)

但是,如果单词之间有多个空格,这显然可能无效.是否有任何预先建立的方式来做这个看似简单的事情,或者我应该使用Regex

c# string cpu-word

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

Update是序列化还是并行化?

我是Unity5的新手,我正在尝试创建一个简单的游戏.

通过扩展MonoBehaviour,我收到一个Update()函数.但我不知道它在幕后是如何运作的.

我的问题是,当许多人MonoBehaviour有自己的Update功能时,Update()函数是序列化的(一个接一个地调用)还是并行化的.

例如,如果我有两个脚本,每个脚本都有自己的更新,那么是同时调用更新(并行化)还是一个接一个地调用它们(序列化)?

如果序列化,我该如何确定订单?

unity-game-engine unityscript

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

异步编程中的跨线程异常

在同步编程中(在async/await到达现场之前),我很清楚如何或为什么发生跨线程异常.如果我启动了一个后台线程来完成一些繁重的任务,以便卸载UI线程并使其响应,我知道如何从后台线程访问UI线程.如果有疑问,我甚至可以检查给定代码执行的线程.

使用异步/等待异步编程,我发现什么是明确的线程识别模糊和模糊(甚至在调试中调用堆栈根据众多等待任务跳转到整个地方).

我试图找出的是一种路线图,可以帮助我识别沿着颠簸的异步/等待曲折的跨线程危险区域/陷阱(原谅隐喻).

在异步编程方面,我究竟应该注意什么来避免跨线程异常?这些可以制成某种清单吗?

c# multithreading asynchronous

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

如何在方法中提供可为空的参数?

我有一个方法可以接受可以为null的参数,因为它是从具有可空列的表中填充的.

private void test(int ID, int? value)
{}
Run Code Online (Sandbox Code Playgroud)

在调用这个方法时,我需要一些方法来为它提供一个可以为空的变量,这就是我的问题.我试过这个:

foreach (DataRow row in DataTable1.Rows)
{
    test((int)row["ID"], (int?)row["value"]);
}
Run Code Online (Sandbox Code Playgroud)

但它给了我一个投射错误

"指定演员表无效"

所以我尝试了这个:

foreach (DataRow row in DataTable1.Rows)
{
    test((int)row["ID"], (int)row["value"] ?? DBnull.Value);
}  
Run Code Online (Sandbox Code Playgroud)

还有这个 :

foreach (DataRow row in DataTable1.Rows)
{
    test((int)row["ID"], (int)row["value"] ?? null);
}
Run Code Online (Sandbox Code Playgroud)

但他们都给我错误

"运算符??不能应用于int和null类型的操作数

我试过的最后一个是:

foreach (DataRow row in DataTable1.Rows)
{
    test((int)row["ID"], (int?)row["value"] ?? null);
}
Run Code Online (Sandbox Code Playgroud)

这个编译,但给出了运行时错误

"指定演员表无效"

那我该怎么做呢?这个想法是参数值用表中的值或null填充.

c# nullable

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

编写程序以查找数组中Max项的索引

在C#中编写一个控制台应用程序,以在数组中查找索引i,该索引是数组中的最大数字.

如果数组中的最大元素出现多次,则需要显示最小索引.

如果数组为空,则输出-1.

请告诉我我的代码有什么问题?

a = { 1, 2, 46, 14, 64, 64 };例如,如果我输入数组,它将返回0,而它应该返回 4.

  public static void Main()
  {
     double[] a = { 1, 9, 9, 8, 9, 2, 2 };
     Console.WriteLine(MaxIndex(a));
  }

  public static double MaxIndex(double[] array)
  {
     var max = double.MinValue;
     int maxInd = 0, maxCount = 0;
     int minIndex = 0;
     var min = double.MaxValue;
     for (var i = 0; i < array.Length; i++)
     {
        if (min > array[i])
        { …
Run Code Online (Sandbox Code Playgroud)

c# arrays console-application

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

.NET Core EF,何时避免异步数据库调用

我目前正在编写一个简单的 Web 应用程序,它利用 mssql 数据库来存储数据。就像现在一样,我尝试设置我的业务逻辑层,从而以最好的方式构建它。

目前,我所有的调用都是使用 Linq 进行的,实际上它们都不是异步的。我对异步编程还很陌生,并且通常很想知道我应该对哪些查询使用异步调用。

据我所知,使用异步数据库调用是有意义的,因为它可以释放主线程上的内存并且不会阻塞 UI。此外,异步调用可以并发运行,这意味着可以同时完成更多事务。

但是,考虑到我在我的上下文中异步添加多个实体,并使用该SaveChangesAsync()方法来结束我的上下文。AddAsync()在我的上下文中拥有多个方法不是多余的,因为SaveChangesAsync()无论如何都会异步运行所有内容吗?

最后,根据我所阅读和所见,很多人更喜欢使用异步数据库调用。也就是说,与其说是例外,不如说是规则。

如果是这样,在什么情况下我会避免异步数据库调用,在我的业务逻辑层中添加异步调用时我应该遵守哪些一般规则?

c# asynchronous entity-framework linq-to-sql task-parallel-library

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

使用DateTime时区

我正在编写一些代码,我在UTC中有一个DateTime,我需要将其显示为LocalTime,其中我有两个时区的Culture对象.

这是我的代码:

public void CultureDateTimeLocalTime()
{
    DateTime dateTimeUtcNow = DateTime.UtcNow;
    DateTime convertedDate = DateTime.SpecifyKind(dateTimeUtcNow, DateTimeKind.Utc);
    DateTime dateTimeLocalTime = convertedDate.ToLocalTime();

    String format = "MM/dd/yyyy hh:mm:sszzz";

    string localTime = dateTimeLocalTime.ToString(format);

    CultureInfo cultureNZ = new CultureInfo("en-NZ");
    CultureInfo cultureUS = new CultureInfo("en-US");

    DateTime DateTimeNZ;
    bool parseNZ = DateTime.TryParse(localTime, cultureNZ, DateTimeStyles.None, out DateTimeNZ);
    string outputNZ = DateTimeNZ.ToString("F");

    DateTime DateTimeUS;
    bool parseUS = DateTime.TryParse(localTime, cultureUS, DateTimeStyles.None, out DateTimeUS);
    string outputUS = DateTimeUS.ToString("F");
}

public void CultureDateTimeLocalTime2()
{
    DateTime dateTimeUtcNow = DateTime.UtcNow;
    DateTime convertedDate = DateTime.SpecifyKind(dateTimeUtcNow, DateTimeKind.Utc); …
Run Code Online (Sandbox Code Playgroud)

c# timezone datetime utc localtime

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

关于Thread.Sleep()在c#中2小时的问题

我正在研究.net windows应用程序.

我在用 System.Threading.Thread.

使用五(5)个线程的单一形式.我有一个代码,在运行时,它按顺序执行一系列行.我想在两者之间添加一个暂停.

为此我正在使用

Thread.Sleep(10800000)
Run Code Online (Sandbox Code Playgroud)

3个小时

但是在执行了行之后我检查了调试模式

Thread.Sleep(10800000)
Run Code Online (Sandbox Code Playgroud)

我的调试不会进入下一行,或者即使在等待4小时后,下一行也不会执行.

我在其他线程中使用此Thread.Delay不在主线程中.此延迟需要因为,我发送命令将设置配置为硬件,该设置至少需要3个小时才能完成.

这就是我使用它的原因

Thread.Delay(10800000)
Run Code Online (Sandbox Code Playgroud)

意味着我的前进代码只在等待3个小时后继续进行.

谁能帮我?

.net c# sleep visual-studio-2012

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