我读了这句话
“C# 支持纯度模式”
...在 O'Reilly 的 C# 8.0 in a Nutshell 一书中。它继续说
“函数式编程的核心是避免使用值发生变化的变量,而支持声明式模式。”
我试图理解什么是声明式模式。但是我找不到声明模式作为设计模式的任何子类别。
任何人都可以向我解释声明式模式是否与行为、创建和结构等设计模式不同?
我们希望可选地控制并行循环中"线程"的数量,以避免压倒Web服务(例如).
是否可以MaxDegreeOfParallelism在Parallel.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) 我想在一个字符串中搜索一个单词.
但是,如果搜索到的单词在其他单词内,我不想得到结果.那是
我希望这返回数字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?
我是Unity5的新手,我正在尝试创建一个简单的游戏.
通过扩展MonoBehaviour,我收到一个Update()函数.但我不知道它在幕后是如何运作的.
我的问题是,当许多人MonoBehaviour有自己的Update功能时,Update()函数是序列化的(一个接一个地调用)还是并行化的.
例如,如果我有两个脚本,每个脚本都有自己的更新,那么是同时调用更新(并行化)还是一个接一个地调用它们(序列化)?
如果序列化,我该如何确定订单?
在同步编程中(在async/await到达现场之前),我很清楚如何或为什么发生跨线程异常.如果我启动了一个后台线程来完成一些繁重的任务,以便卸载UI线程并使其响应,我知道如何从后台线程访问UI线程.如果有疑问,我甚至可以检查给定代码执行的线程.
使用异步/等待异步编程,我发现什么是明确的线程识别模糊和模糊(甚至在调试中调用堆栈根据众多等待任务跳转到整个地方).
我试图找出的是一种路线图,可以帮助我识别沿着颠簸的异步/等待曲折的跨线程危险区域/陷阱(原谅隐喻).
在异步编程方面,我究竟应该注意什么来避免跨线程异常?这些可以制成某种清单吗?
我有一个方法可以接受可以为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#中编写一个控制台应用程序,以在数组中查找索引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) 我目前正在编写一个简单的 Web 应用程序,它利用 mssql 数据库来存储数据。就像现在一样,我尝试设置我的业务逻辑层,从而以最好的方式构建它。
目前,我所有的调用都是使用 Linq 进行的,实际上它们都不是异步的。我对异步编程还很陌生,并且通常很想知道我应该对哪些查询使用异步调用。
据我所知,使用异步数据库调用是有意义的,因为它可以释放主线程上的内存并且不会阻塞 UI。此外,异步调用可以并发运行,这意味着可以同时完成更多事务。
但是,考虑到我在我的上下文中异步添加多个实体,并使用该SaveChangesAsync()方法来结束我的上下文。AddAsync()在我的上下文中拥有多个方法不是多余的,因为SaveChangesAsync()无论如何都会异步运行所有内容吗?
最后,根据我所阅读和所见,很多人更喜欢使用异步数据库调用。也就是说,与其说是例外,不如说是规则。
如果是这样,在什么情况下我会避免异步数据库调用,在我的业务逻辑层中添加异步调用时我应该遵守哪些一般规则?
c# asynchronous entity-framework linq-to-sql task-parallel-library
我正在编写一些代码,我在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) 我正在研究.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个小时后继续进行.
谁能帮我?
c# ×9
asynchronous ×2
.net ×1
arrays ×1
cpu-word ×1
datetime ×1
declarative ×1
linq-to-sql ×1
localtime ×1
nullable ×1
sleep ×1
string ×1
timezone ×1
unityscript ×1
utc ×1