【发布时间】:2022-01-22 23:39:41
【问题描述】:
背景:我正在处理一个包含多个项目的大型解决方案。目标是将在项目 A 中检索到的简单用户输入(长度为 3 的两个整数数组和一个布尔值)传递给项目 B,在该项目 B 中,某些函数使用它。项目 B 是一个视图模型。但是,项目 A 引用了项目 B(例如,将项目 B 命名为引用),因此为避免循环依赖,我不能从 B 引用 A。
很明显,非常初学者,但这是在专业环境中,所以我只能“改造”这么多。我在 Visual Studio 中工作。
想法:我能想到的解决方案是,在项目 B 中,在编译时生成这些 int 和 bool 的一些内存。然后在运行时,将其填充到项目 A 中,然后由项目 B 检索此信息。
目前我所拥有的根本没有这样做,但我会发布我目前拥有的。在项目 B 中,我有一个合适的文件:
namespace NameSpaceB
{
public struct Inputs
{
public int[] array1;
public int[] array2;
public bool t;
}
}
现在前往项目 A,它会是这样的:
using NameSpaceB;
/* what follows is some structure already present in the solution, not my work */
namespace NameSpaceA
{
...
internal public class MyClass
{
public static void MyFunction()
{
...
int[] inputs1 = { 1, 2, 3 }; /* assume these are inputs from a View model during run time */
int[] inputs2 = { 4, 5, 6 };
bool T = true;
/* here is where I'd like something along these lines */
Inputs inputInfo;
inputInfo = default;
Array.Copy(inputs1, Inputs.array1, 3);
Array.Copy(inputs2, Inputs.array2, 3);
Inputs.t = T;
...
}
}
}
现在理想情况下,我想在 MyFunction() 执行后检索项目 B 中的内容 inputInfo。我的 View 项目中将有默认输入(出现 UI),因此希望在我的数组中总能找到“那里”的东西。
我认为这样做的方法是在项目 B 中,在编译时为该结构分配内存,以便两个项目在运行时都可以访问它。我已经进行了一些谷歌搜索,但正在努力了解如何最好地做到这一点,或者即使我的想法是一个好主意。
【问题讨论】:
-
把共享的东西放到C里,A和B都引用C?
-
是的,这将是我的第一个建议。也就是说,我觉得这里有太多假设,无法让你的问题有意义地回答。请发布您的实际代码,而不是一些手动的虚构代码。您发布的内容看起来有几个问题。
-
@LasseV.Karlsen 啊,我确实想到了这个,但是创建第三个项目纯粹是为了托管这么少量的数据,感觉有点浪费。除非我误解了你?
-
无论如何你都不能在编译时分配内存,在 C# 中不能以任何合理的方式分配内存。
-
这个标题听起来像是一个 XY 问题。询问如何在编译时分配内存是一个次要问题,与解决您遇到的实际问题的具体方法有关,这可能是(尽管有点不清楚)您在两个项目共享的类型声明中存在循环依赖关系。可能应该更改标题以代表实际问题。
标签: c# struct memory-management