Это рекурсивно, каждый раз, когда вы создаете город, вы создаете город, он продолжается вечно, вселенная падает в единичность
public class Town
{
public Town town = new Town()
...
То, что вы, вероятно, хотите, это
public class Town
{
// when you auto initialise a property,
// it gets created when your create the class
// this is your recursion, lets get rid of it as its completely
// unneeded
//public Town town = new Town();
public List<Buildings> buildings = new List<Buildings>();
private List<string> buildingNames = new List<string>() {"Town_Hall", "Market", "Residences", "Mortician", "Bank", "Hotel", "Tailor", "Gunsmith", "General_Store", "Sheriff", "Well", "Gate", "Wall"};
public void ResetTown()
{
// notice now we dont need a reference to town
// we "are" the town
foreach (Buildings building in this)
{
int i = 0;
i++;
building.Name = buildingNames[i].ToString();
building.Level = 0;
}
}
public IEnumerator<Buildings> GetEnumerator()
{
return buildings.GetEnumerator();
}
}
Использование такое же
public static void Main(string[] args)
{
Town town = new Town();
}
Ярлыками можно управлять с помощью COM-объектов в SHELL32.DLL.
В Вашем проекте Visual Studio добавьте ссылку на библиотеку COM "Microsoft Shell Controls And Automation" и затем используйте следующее:
/// <summary>
/// Returns whether the given path/file is a link
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static bool IsLink(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
return folderItem.IsLink;
}
return false; // not found
}
Можно получить фактическую цель ссылки следующим образом:
/// <summary>
/// If path/file is a link returns the full pathname of the target,
/// Else return the original pathnameo "" if the file/path can't be found
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static string GetShortcutTarget(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
if (folderItem.IsLink)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return shortcutFilename;
}
return ""; // not found
}
Можно просто проверить расширение и/или содержание этого файла. Это содержит специальный GUID в заголовке.
Прочитайте этот документ.