小编Mic*_*kyD的帖子

Unity中的Quaternion.FromToRotation出错?

每当我运行此代码时,我会收到多个错误:

transform.rotation = Quaternion.FromToRotation (Vector3(0, 0, 0), Vector3(0, 0, 270));
Run Code Online (Sandbox Code Playgroud)

你能建议修复这段代码吗?

错误:

表达式表示预期的类型',即可变',值'或方法组'

最好的重载方法匹配UnityEngine.Quaternion.FromToRotation(UnityEngine.Vector3, UnityEngine.Vector3)有一些无效的参数

参数#1'无法将对象'表达式转换为类型 UnityEngine.Vector3

c# unity-game-engine unity5

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

收益率回归后为什么继续下跌?

我偶然发现了这段代码:

public IEnumerable<object> Process()
{
    foreach (var item in items)
    {

        if (item.Created < DateTime.Now)
        {   
            yield return item;
            continue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么continue在这种情况下不是不必要的(VS不标记continue为冗余控制流跳转语句)?

c# yield continue return

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

有没有一种简单的方法可以通过线程转储来查找线程死锁的原因?

我们在生产中有一个 C# 控制台应用程序,它具有间歇性线程死锁。我试图通过将 VS 2017 附加到正在运行的进程来查找死锁,但是我找不到任何方法可以轻松找到死锁的原因。似乎没有任何窗口可以识别哪些线程拥有哪些锁。(我尝试使用内存窗口,但这根本不起作用)。

我也尝试过使用转储文件,但发现很难理解它显示的内容。(但这是在我知道我正在寻找僵局之前。)

我习惯于在 Java 中使用 JStack,这是一个命令行实用程序,用于针对正在运行的 Java 应用程序运行,它打印线程转储并识别死锁,并在每个 StackTrace 中显示线程锁定监视器的点。

.NET 是否有一些等效的工具?

.net c# multithreading deadlock

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

如何跨越多个程序集的 C# 命名空间?

单线问题没有意义,所以让我详细说明我的挑战:

我创建了 3 个 DLL(MyUtils、MyConnector、MyAgent),每个都包含它自己的一组“内部”类、类型和成员。所有的类、类型和成员都是它们各自的默认命名空间(与它们的程序集名称相同)。

  1. MyAgent 需要添加对 MyConnector 的引用并使用它的一些类。MyConnector 需要添加对 MyUtils 的引用并使用它的一些类。就目前而言,MyAgent 可能还需要访问 MyUtils 中的某些类型。

    现在,由于 MyUtils 中的所有类型和成员都是内部的,我无法将其添加为对 MyConnector 的引用,同样从 MyConnector 到 MyAgent。我不想公开任何这些类型,因为我不希望使用我的 DLL 的应用程序直接访问它们。

    我知道理论上可以跨越多个程序集的命名空间,但不清楚如何实际实现上述场景。

  2. 最后,我只想部署要在 EXE 中使用的 MyAgent.dll。该 EXE 应该只能访问 MyAgent 中的公共类型,但有一个例外:MyConnection 对象(包含在 MyConnector 中的类型)将从 MyAgent 方法返回。再次,我的访问说明符(内部)限制了这种可能性。

我一直在想太多,以至于我现在完全糊涂了。非常感谢有经验的程序员的一些指导。

提前致谢。

c# dll namespaces exe

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

如何从代码较少的列表中删除类?

这是一堂课:

public class ABC
        {
            public string A;
            public string B;
        }
Run Code Online (Sandbox Code Playgroud)

我想从A等于123的列表中删除该类.这里是代码:

List<ABC> L = new List<ABC>();
            ABC ClassToRemove=null;
            foreach (ABC Single in L)
            {
                if (Single.A == "123")
                {
                    ClassToRemove = Single;
                    break;
                }
            }
            if (ClassToRemove != null)
            {
                L.Remove(ClassToRemove);
            }
Run Code Online (Sandbox Code Playgroud)



这段代码可以做到这一点.但是我觉得它太长而且难看.我想知道是否有更快的方法来实现它并且代码更好一些?

c#

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

组合框的DisplayMemberPath属性未按预期工作,源是具有自定义键的字典

我有一个ComboBox,它的源是一个IDictionary<Key, String>'Key'是自定义键.的ComboBox定义如下:

<ComboBox 
    x:Name="MD_PDIR_COMBO_SOURCE"
    Grid.Row="0" 
    Style="{DynamicResource USButtonComboBoxStyle}"
    Margin="14,5"
    VerticalAlignment="Top" 
    HorizontalAlignment="Stretch"
    ItemsSource="{Binding Path=SourcesComboList}"
    DisplayMemberPath="Value"
    SelectedValuePath="Key"
    SelectedValue="{Binding Path=SelectedSource}"
    SelectionChanged="MD_PDIR_COMBO_SOURCE_SelectionChanged" 
/>                        
Run Code Online (Sandbox Code Playgroud)

现在我面临的问题是,虽然DisplayMemberPath设置为字典的"值"是a String,但在选择项目时组合框中显示的可视文本是BLANK/EMPTY.

尽管组合框选择更改的所有所需功能都正确发生,但在选择项目后未显示值/文本.

请帮忙!

wpf combobox

0
推荐指数
2
解决办法
5450
查看次数

<<是什么意思?

谢谢你看看这个问题.

我在传统的for block中看到了以下代码片段,但不确定它在其上下文中的重要性.

index <<= 1;

有关更多上下文,这里是完整的代码块.

ulong index = 1;
int distance = 0;
for (int i = 0; i < 64; i++)
{
    if ((hash1 & index) != (hash2 & index))
    {
        distance++;
    }

    index <<= 1;
}
Run Code Online (Sandbox Code Playgroud)

它只是确保索引仍为1,如果不是,则将其值返回1?

其次,这是什么,所以我可以再读一遍.

最后,感谢您抽出时间和考虑此事.

c#

0
推荐指数
1
解决办法
124
查看次数

在自己的线程上执行的任务

我有一个Action,可以访问三个Cosmos DB存储库来检索信息.该操作具有以下代码:

var task1 = _itemRepository.RetrieveByIdAsync(id);
var task2 = _partsRepository.RetrieveForItemAsync(id);
var task3 = _purchasesRepository.RetrieveForItemAsync(id, currentUserId);

var userPurchased = await _userPurchaseRepository.HasUserPurchased(Session.UserId) // this is awaited because it is a SQL task and can only execute one at a time

await Task.WhenAll(task1, task2, task3);
Run Code Online (Sandbox Code Playgroud)

我在调试时注意到的是,任务似乎在不同的线程上运行.System.Threading.Thread.CurrentThread.ManagedThreadId与任务运行之前,每个任务以及等待任务之后不同.

输入前的线程ID - 5
项目存储库线程ID - 61
部件存储库线程ID - 5个
购买存储库线程ID - 60
WaitAll后的线程ID - 6

存储库方法最终都调用了一个常见的QueryAsync方法,如下所示:

public async Task<IEnumerable<TDomainObject>> QueryAsync(Expression<Func<TDomainObject, bool>> predicate, FeedOptions options)
{
    var query = Client.CreateDocumentQuery<TDomainObject>(Collection.DocumentsLink, options).Where(predicate).AsDocumentQuery();

    List<TDomainObject> results = new List<TDomainObject>(); …
Run Code Online (Sandbox Code Playgroud)

c# multithreading async-await asp.net-core

0
推荐指数
1
解决办法
410
查看次数

什么时候应该在ac#if语句中使用contains方法而不是逻辑运算符?

我的同事说array.contains()if在评估枚举时,我应该在声明中使用。

示例a:

if (new[] { enumvalue.a, enumvalue.b, enumvalue.c }.Contains(x.some_enum_value))
{
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

...与示例b相比

if (x.some_enum_value == enumvalue.a || x.some_enum_value == enumvalue.b || x.some_enum_value == enumvalue.c) 
{
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用示例a而不是示例b?

c# if-statement contains logical-operators

0
推荐指数
1
解决办法
58
查看次数

如何在字符串插值中使用条件运算符?

我目前正在使用这种技术:

...
    string s = user.Gender ? "Mr." : "Mrs.";
    string body = $@"Dear {s} {user.First_name}..."
...
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情:

...
    string body = $"Dear {return user.Gender ? "Mr." : "Mrs."} {user.First_name}..."
...
Run Code Online (Sandbox Code Playgroud)

c# conditional-operator c#-6.0

0
推荐指数
1
解决办法
81
查看次数